From 4f9707811eef19b7c9f59d587d05208b40a23b54 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期四, 10 七月 2025 17:35:02 +0800
Subject: [PATCH] 增加redis锁

---
 UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java |  259 +++++++++++++++++++++++++++------------------------
 1 files changed, 139 insertions(+), 120 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 7cc99cb..4120934 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
@@ -672,136 +672,150 @@
      */
     @Override
     public ResultUtil cancleOrderPrivateCar(Integer id, Integer payType, Integer cancleId, Integer type) throws Exception {
-        OrderPrivateCar orderPrivateCar = this.selectById(id);
-        Integer uid = orderPrivateCar.getUserId();
-        UserInfo userInfo = userInfoService.selectById(uid);
-        ResultUtil resultUtil = ResultUtil.success("");
-
-        if(null == orderPrivateCar){
-            return ResultUtil.error("取消订单失败,订单信息有误", "");
-        }
-        if(orderPrivateCar.getState() != 12){
-            return ResultUtil.error("取消订单失败,不合法的操作", "");
-        }
-        OrderCancel orderCancel = null;
-        if(null == cancleId || cancleId==0){
-            orderCancel = orderCancelService.query(id, 1, null, null, 1);
-        }else{
-            orderCancel = orderCancelService.selectById(cancleId);
-        }
-
-        CancleOrder query = cancleOrderService.query(orderPrivateCar.getOrderType(), 1, orderPrivateCar.getCompanyId());
-        if(null != query){
-            String code = id + "_1_" + UUIDUtil.getRandomCode(3);
-            if(payType == 1){//微信支付
-                if(ToolUtil.isEmpty(userInfo.getAppletsOpenId())){
-                    return ResultUtil.error("未授权微信,无法完成支付");
+        boolean lock = redisUtil.lock(id + "_cancleOrder", 10);
+        if(!lock){
+            int num1 = 1;
+            while (num1 <= 10){
+                Thread.sleep(3000);//等待3秒
+                lock = redisUtil.lock(id + "_cancleOrder", 10);
+                if(lock){
+                    break;
+                }else{
+                    num1++;
                 }
-                orderCancel.setPayType(1);
-                orderCancelService.updateById(orderCancel);
-                resultUtil =  payMoneyUtil.weixinpay("订单取消",id +"",code,query.getMoney()+"","/base/wxCancelOrderTaxi","JSAPI",userInfo.getAppletsOpenId());
-                if(resultUtil.getCode()==200){
-                    paymentRecordService.saveData(1, null, null, id, 1, 1, query.getMoney(), null, 1, code);//添加预支付数据
-                    new Thread(()->{
-                        int num = 1;
-                        int min = 5000;
-                        int w = 0;
-                        while (num <= 10) {
-                            try {
-                                w += min * num;
-                                OrderPrivateCar orderPrivateCar1 = orderPrivateCarMapper.selectById(id);
-                                if (orderPrivateCar1.getState() == 10) {
-                                    break;
-                                }
-                                ResultUtil<Map<String, Object>> resultUtil1 = payMoneyUtil.queryWXOrder("", code, "JSAPI");
-                                if (resultUtil1.getCode() == 200) {
-                                    /**
-                                     * SUCCESS--支付成功
-                                     * REFUND--转入退款
-                                     * NOTPAY--未支付
-                                     * CLOSED--已关闭
-                                     * REVOKED--已撤销(刷卡支付)
-                                     * USERPAYING--用户支付中
-                                     * PAYERROR--支付失败(其他原因,如银行返回失败)
-                                     * ACCEPT--已接收,等待扣款
-                                     */
-                                    String s = resultUtil1.getData().get("trade_state").toString();
-                                    if ("REFUND".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s) || num == 10) {
+            }
+        }
+        ResultUtil resultUtil = ResultUtil.success("");
+        try {
+            OrderPrivateCar orderPrivateCar = this.selectById(id);
+            Integer uid = orderPrivateCar.getUserId();
+            UserInfo userInfo = userInfoService.selectById(uid);
+    
+            if(null == orderPrivateCar){
+                return ResultUtil.error("取消订单失败,订单信息有误", "");
+            }
+            if(orderPrivateCar.getState() != 12){
+                return ResultUtil.error("取消订单失败,不合法的操作", "");
+            }
+            OrderCancel orderCancel = null;
+            if(null == cancleId || cancleId==0){
+                orderCancel = orderCancelService.query(id, 1, null, null, 1);
+            }else{
+                orderCancel = orderCancelService.selectById(cancleId);
+            }
+    
+            CancleOrder query = cancleOrderService.query(orderPrivateCar.getOrderType(), 1, orderPrivateCar.getCompanyId());
+            if(null != query){
+                String code = id + "_1_" + UUIDUtil.getRandomCode(3);
+                if(payType == 1){//微信支付
+                    if(ToolUtil.isEmpty(userInfo.getAppletsOpenId())){
+                        return ResultUtil.error("未授权微信,无法完成支付");
+                    }
+                    orderCancel.setPayType(1);
+                    orderCancelService.updateById(orderCancel);
+                    resultUtil =  payMoneyUtil.weixinpay("订单取消",id +"",code,query.getMoney()+"","/base/wxCancelOrderTaxi","JSAPI",userInfo.getAppletsOpenId());
+                    if(resultUtil.getCode()==200){
+                        paymentRecordService.saveData(1, null, null, id, 1, 1, query.getMoney(), null, 1, code);//添加预支付数据
+                        new Thread(()->{
+                            int num = 1;
+                            int min = 5000;
+                            int w = 0;
+                            while (num <= 10) {
+                                try {
+                                    w += min * num;
+                                    OrderPrivateCar orderPrivateCar1 = orderPrivateCarMapper.selectById(id);
+                                    if (orderPrivateCar1.getState() == 10) {
                                         break;
                                     }
-                                    if ("SUCCESS".equals(s) || "ACCEPT".equals(s)) {
-                                        String transaction_id = resultUtil1.getData().get("transaction_id").toString();
-                                        payCancelOrderPrivateCar(id, transaction_id, 1);
-                                        break;
-                                    }
-                                    if ("NOTPAY".equals(s) || "USERPAYING".equals(s)) {
+                                    ResultUtil<Map<String, Object>> resultUtil1 = payMoneyUtil.queryWXOrder("", code, "JSAPI");
+                                    if (resultUtil1.getCode() == 200) {
+                                        /**
+                                         * SUCCESS--支付成功
+                                         * REFUND--转入退款
+                                         * NOTPAY--未支付
+                                         * CLOSED--已关闭
+                                         * REVOKED--已撤销(刷卡支付)
+                                         * USERPAYING--用户支付中
+                                         * PAYERROR--支付失败(其他原因,如银行返回失败)
+                                         * ACCEPT--已接收,等待扣款
+                                         */
+                                        String s = resultUtil1.getData().get("trade_state").toString();
+                                        if ("REFUND".equals(s) || "CLOSED".equals(s) || "REVOKED".equals(s) || "PAYERROR".equals(s) || num == 10) {
+                                            break;
+                                        }
+                                        if ("SUCCESS".equals(s) || "ACCEPT".equals(s)) {
+                                            String transaction_id = resultUtil1.getData().get("transaction_id").toString();
+                                            payCancelOrderPrivateCar(id, transaction_id, 1);
+                                            break;
+                                        }
+                                        if ("NOTPAY".equals(s) || "USERPAYING".equals(s)) {
+                                            Thread.sleep(w);
+                                            num++;
+                                        }
+                                    } else {
                                         Thread.sleep(w);
                                         num++;
                                     }
-                                } else {
-                                    Thread.sleep(w);
-                                    num++;
+                                }catch (Exception e){
+                                    e.printStackTrace();
                                 }
-                            }catch (Exception e){
-                                e.printStackTrace();
                             }
-                        }
-                    }).start();
-
-                }else{
-                    resultUtil = ResultUtil.error("支付失败", "");
+                        }).start();
+                
+                    }else{
+                        resultUtil = ResultUtil.error("支付失败", "");
+                    }
+            
                 }
-
-            }
-            if(payType == 2){//支付宝支付
-                orderCancel.setPayType(2);
-                orderCancelService.updateById(orderCancel);
-                resultUtil =  payMoneyUtil.alipay("订单取消","订单取消", "",code,query.getMoney()+"","/base/aliCancelOrderTaxi");
-                if(resultUtil.getCode()==200){
-                    paymentRecordService.saveData(1, null, null, id, 1, 2, query.getMoney(), null, 1, code);//添加预支付数据
-                    resultUtil = resultUtil;
-                }else{
-                    resultUtil = ResultUtil.error("支付失败", "");
+                if(payType == 2){//支付宝支付
+                    orderCancel.setPayType(2);
+                    orderCancelService.updateById(orderCancel);
+                    resultUtil =  payMoneyUtil.alipay("订单取消","订单取消", "",code,query.getMoney()+"","/base/aliCancelOrderTaxi");
+                    if(resultUtil.getCode()==200){
+                        paymentRecordService.saveData(1, null, null, id, 1, 2, query.getMoney(), null, 1, code);//添加预支付数据
+                        resultUtil = resultUtil;
+                    }else{
+                        resultUtil = ResultUtil.error("支付失败", "");
+                    }
                 }
-            }
-            if(payType == 3){//余额支付
-                if(userInfo.getBalance() != null && userInfo.getBalance() < query.getMoney()){
-                    return ResultUtil.error("余额不足,无法完成支付", "");
-                }
-
-                userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(query.getMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
-                //添加交易明细
-                transactionDetailsService.saveData(uid, "取消订单", query.getMoney(), 2, 1, 1, 1, id);
-                userInfoService.updateById(userInfo);
-
-                //解除小号绑定
+                if(payType == 3){//余额支付
+                    if(userInfo.getBalance() != null && userInfo.getBalance() < query.getMoney()){
+                        return ResultUtil.error("余额不足,无法完成支付", "");
+                    }
+            
+                    userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(query.getMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+                    //添加交易明细
+                    transactionDetailsService.saveData(uid, "取消订单", query.getMoney(), 2, 1, 1, 1, id);
+                    userInfoService.updateById(userInfo);
+            
+                    //解除小号绑定
 //                if(orderPrivateCar.getBindId() != null){
 //                    chinaMobileUtil.midAxbUnBindSend(orderPrivateCar.getBindId(),orderPrivateCar.getTelX());
 //                }
-
-                orderPrivateCar.setState(10);
-                orderPrivateCar.setTelX("");
-                orderPrivateCar.setBindId("");
-                this.updateById(orderPrivateCar);
-
-                orderCancel.setState(2);
-                orderCancel.setPayType(3);
-                orderCancelService.updateById(orderCancel);
-
-                //添加已收入明细
-                incomeService.saveData(1, orderPrivateCar.getCompanyId(), 3, orderPrivateCar.getId(), 1, query.getMoney());
-                //添加已收入明细
-                Company company = companyService.selectById(orderPrivateCar.getCompanyId());
-                Double taxi = company.getSpeMoney();
-                BigDecimal c =new BigDecimal(query.getMoney());//司机收入
-                incomeService.saveData(2, orderPrivateCar.getDriverId(), 3, orderPrivateCar.getId(), 1, c.doubleValue());
-                Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
-                driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
-                driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
-                driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
-                driverService.updateById(driver);
-
-                this.deleteTask(id);//删除定时任务
+            
+                    orderPrivateCar.setState(10);
+                    orderPrivateCar.setTelX("");
+                    orderPrivateCar.setBindId("");
+                    this.updateById(orderPrivateCar);
+            
+                    orderCancel.setState(2);
+                    orderCancel.setPayType(3);
+                    orderCancelService.updateById(orderCancel);
+            
+                    //添加已收入明细
+                    incomeService.saveData(1, orderPrivateCar.getCompanyId(), 3, orderPrivateCar.getId(), 1, query.getMoney());
+                    //添加已收入明细
+                    Company company = companyService.selectById(orderPrivateCar.getCompanyId());
+                    Double taxi = company.getSpeMoney();
+                    BigDecimal c =new BigDecimal(query.getMoney());//司机收入
+                    incomeService.saveData(2, orderPrivateCar.getDriverId(), 3, orderPrivateCar.getId(), 1, c.doubleValue());
+                    Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
+                    driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+                    driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+                    driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+                    driverService.updateById(driver);
+            
+                    this.deleteTask(id);//删除定时任务
 
 //                new Thread(new Runnable() {
 //                    @Override
@@ -809,10 +823,15 @@
 //                        pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0);
 //                    }
 //                }).start();
-
-                //添加消息
-                systemNoticeService.addSystemNotice(1, "您已使用余额成功支付取消订单费用,谢谢使用!", orderPrivateCar.getUserId(), 1);
+            
+                    //添加消息
+                    systemNoticeService.addSystemNotice(1, "您已使用余额成功支付取消订单费用,谢谢使用!", orderPrivateCar.getUserId(), 1);
+                }
             }
+        }catch (Exception e){
+            e.printStackTrace();
+        }finally {
+            redisUtil.unlock(id + "_cancleOrder");
         }
         return resultUtil;
     }

--
Gitblit v1.7.1