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锁

---
 DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java           |  262 +++++++++++++++-------------
 UserZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java |  259 +++++++++++++++-------------
 2 files changed, 281 insertions(+), 240 deletions(-)

diff --git a/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java b/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java
index 9e38e89..651e9bd 100644
--- a/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java
+++ b/DriverZYTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/ReassignServiceImpl.java
@@ -84,6 +84,8 @@
     @Value("${callbackPath}")
     private String callbackPath;
 
+    @Autowired
+    private RedisUtil redisUtil;
 
 
     /**
@@ -94,142 +96,162 @@
      */
     @Override
     public ResultUtil saveData(Reassign reassign, Integer uid, Integer type) throws Exception {
-        type = null == type ? 2 : type;//现目前微信只支持小程序支付
-        String content = reassign.getRemark();
-        if(ToolUtil.isNotEmpty(content)){
-            List<SensitiveWords> sensitiveWords = sensitiveWordsMapper.selectList(null);
-            for(SensitiveWords s : sensitiveWords){
-                content = content.replaceAll(s.getContent(), "***");
+        boolean lock = redisUtil.lock(reassign.getOrderId() + "_reassign", 10);
+        if(!lock){
+            int num1 = 1;
+            while (num1 <= 10){
+                Thread.sleep(3000);//等待3秒
+                lock = redisUtil.lock(reassign.getOrderId() + "_reassign", 10);
+                if(lock){
+                    break;
+                }else{
+                    num1++;
+                }
             }
         }
-        reassign.setRemark(content);
+    
         ResultUtil resultUtil = ResultUtil.success();
-        Driver driver = driverService.selectById(uid);
-        // TODO: 2020/11/12 司机端不控制重复提交(如果重复提交且未支付,直接将之前的数据删除)
+        try {
+            type = null == type ? 2 : type;//现目前微信只支持小程序支付
+            String content = reassign.getRemark();
+            if(ToolUtil.isNotEmpty(content)){
+                List<SensitiveWords> sensitiveWords = sensitiveWordsMapper.selectList(null);
+                for(SensitiveWords s : sensitiveWords){
+                    content = content.replaceAll(s.getContent(), "***");
+                }
+            }
+            reassign.setRemark(content);
+            Driver driver = driverService.selectById(uid);
+            // TODO: 2020/11/12 司机端不控制重复提交(如果重复提交且未支付,直接将之前的数据删除)
 //        Reassign query = reassignMapper.query(uid, null, null, null, 1);
 //        if(null != query){
 //            return ResultUtil.error("有未完成支付的改派申请");
 //        }
-        Reassign query = reassignMapper.query(uid, null, reassign.getOrderId(), reassign.getOrderType(), 1);
-        if(null != query){
+            Reassign query = reassignMapper.query(uid, null, reassign.getOrderId(), reassign.getOrderType(), 1);
+            if(null != query){
 //            return ResultUtil.error("不能重复提交申请");
-            reassignMapper.deleteById(query.getId());
-        }
-        query = reassignMapper.query(uid, null, reassign.getOrderId(), reassign.getOrderType(), 2);
-        if(null != query){
-            return ResultUtil.error("您提交的申请正在处理中");
-        }
-
-        //获取支付金额
-        Double aDouble = orderService.queryReassignMoney(reassign.getOrderId(), reassign.getOrderType());
-        reassign.setMoney(aDouble);
-        reassign.setOriginalDriverId(uid);
-        reassign.setOriginalCarId(driver.getCarId());
-        reassign.setInsertTime(new Date());
-        this.insert(reassign);
-
-        systemNoticeService.addSystemNotice(2, "您的改派申请已成功提交,我们会尽快为你处理!", uid);
-
-        //开始支付
-        if(null != reassign.getPayType()){
-            if(reassign.getPayType() == 1){//微信支付
-                reassign.setState(1);
-                ResultUtil resultUtil1 = payMoneyUtil.weixinpay("改派订单",reassign.getId()+"",reassign.getId() + "_" + reassign.getOrderType(),aDouble+"","/base/wxReassign","APP", "");
-                //Map<String, String> map = icbcPayUtil.placeAnOrder(reassign.getId() + "_" + reassign.getOrderType(), 9, 5, uid.toString(), "改派订单", aDouble, callbackPath + "/base/wxReassign", "", type, driver.getAppletsOpenId());
-                if(resultUtil1.getCode()==200){
-                    paymentRecordService.saveData(1, null, null, reassign.getOrderId(), reassign.getOrderType(), 1, aDouble, null, 1);//添加预支付数据
-                    resultUtil = resultUtil1;
-                }else{
-                    resultUtil = ResultUtil.error("获取支付信息失败", "");
-                }
+                reassignMapper.deleteById(query.getId());
             }
-            if(reassign.getPayType() == 2){//支付宝
-                reassign.setState(1);
-                ResultUtil resultUtil1 = payMoneyUtil.alipay("改派订单","改派订单",reassign.getId() + "_" + reassign.getOrderType(),aDouble+"","/base/aliReassign", "");
-                //Map<String, String> map = icbcPayUtil.placeAnOrder(reassign.getId() + "_" + reassign.getOrderType(), 10, 5, uid.toString(), "改派订单", aDouble, callbackPath + "/base/aliReassign", "", 2, "");
-                if(resultUtil1.getCode()==200){
-                    paymentRecordService.saveData(1, null, null, reassign.getOrderId(), reassign.getOrderType(), 2, aDouble, null, 1);//添加预支付数据
-                    resultUtil = resultUtil1;
-                }else{
-                    resultUtil = ResultUtil.error("获取支付信息失败", "");
-                }
+            query = reassignMapper.query(uid, null, reassign.getOrderId(), reassign.getOrderType(), 2);
+            if(null != query){
+                return ResultUtil.error("您提交的申请正在处理中");
             }
-            if(reassign.getPayType() == 3){//余额
-                reassign.setState(2);
-                reassign.setPayTime(new Date());
-                reassignMapper.updateById(reassign);
-
-                Double balance = driver.getBalance();
-                Double laveBusinessMoney = driver.getLaveBusinessMoney();
-                Double laveActivityMoney = driver.getLaveActivityMoney();
-                if(null == balance || balance < aDouble){
-                    throw new SystemException("账户余额不足");
+    
+            //获取支付金额
+            Double aDouble = orderService.queryReassignMoney(reassign.getOrderId(), reassign.getOrderType());
+            reassign.setMoney(aDouble);
+            reassign.setOriginalDriverId(uid);
+            reassign.setOriginalCarId(driver.getCarId());
+            reassign.setInsertTime(new Date());
+            this.insert(reassign);
+    
+            systemNoticeService.addSystemNotice(2, "您的改派申请已成功提交,我们会尽快为你处理!", uid);
+    
+            //开始支付
+            if(null != reassign.getPayType()){
+                if(reassign.getPayType() == 1){//微信支付
+                    reassign.setState(1);
+                    ResultUtil resultUtil1 = payMoneyUtil.weixinpay("改派订单",reassign.getId()+"",reassign.getId() + "_" + reassign.getOrderType(),aDouble+"","/base/wxReassign","APP", "");
+                    //Map<String, String> map = icbcPayUtil.placeAnOrder(reassign.getId() + "_" + reassign.getOrderType(), 9, 5, uid.toString(), "改派订单", aDouble, callbackPath + "/base/wxReassign", "", type, driver.getAppletsOpenId());
+                    if(resultUtil1.getCode()==200){
+                        paymentRecordService.saveData(1, null, null, reassign.getOrderId(), reassign.getOrderType(), 1, aDouble, null, 1);//添加预支付数据
+                        resultUtil = resultUtil1;
+                    }else{
+                        resultUtil = ResultUtil.error("获取支付信息失败", "");
+                    }
                 }
-                if(null != laveBusinessMoney && laveBusinessMoney.compareTo(aDouble) >= 0){
-                    driver.setLaveBusinessMoney(new BigDecimal(laveBusinessMoney).subtract(new BigDecimal(aDouble)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
-                }else if(null != laveActivityMoney && laveActivityMoney.compareTo(aDouble) >= 0){
-                    driver.setLaveActivityMoney(new BigDecimal(laveActivityMoney).subtract(new BigDecimal(aDouble)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+                if(reassign.getPayType() == 2){//支付宝
+                    reassign.setState(1);
+                    ResultUtil resultUtil1 = payMoneyUtil.alipay("改派订单","改派订单",reassign.getId() + "_" + reassign.getOrderType(),aDouble+"","/base/aliReassign", "");
+                    //Map<String, String> map = icbcPayUtil.placeAnOrder(reassign.getId() + "_" + reassign.getOrderType(), 10, 5, uid.toString(), "改派订单", aDouble, callbackPath + "/base/aliReassign", "", 2, "");
+                    if(resultUtil1.getCode()==200){
+                        paymentRecordService.saveData(1, null, null, reassign.getOrderId(), reassign.getOrderType(), 2, aDouble, null, 1);//添加预支付数据
+                        resultUtil = resultUtil1;
+                    }else{
+                        resultUtil = ResultUtil.error("获取支付信息失败", "");
+                    }
                 }
-                driver.setBalance(new BigDecimal(balance).subtract(new BigDecimal(aDouble)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
-                driverService.updateById(driver);
-                //添加交易明细
-                transactionDetailsService.saveData(uid, "司机改派支付", aDouble, 2, 1, 2, reassign.getOrderType(), reassign.getOrderId());
-
-
-                //修改改派通知状态
-                switch (reassign.getOrderType()){
-                    case 1:
-                        OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(reassign.getOrderId());
-                        orderPrivateCar.setOldState(orderPrivateCar.getState());
-                        orderPrivateCar.setState(11);
-                        orderPrivateCar.setReassignNotice(2);
-                        orderPrivateCarService.updateById(orderPrivateCar);
-
-                        //添加已收入明细
-                        incomeService.saveData(1, orderPrivateCar.getCompanyId(), 4, orderPrivateCar.getId(), 1, reassign.getMoney());
-                        break;
-                    case 2:
-                        OrderTaxi orderTaxi = orderTaxiService.selectById(reassign.getOrderId());
-                        orderTaxi.setOldState(orderTaxi.getState());
-                        orderTaxi.setState(11);
-                        orderTaxi.setReassignNotice(2);
-                        orderTaxiService.updateById(orderTaxi);
-
-                        //添加已收入明细
-                        incomeService.saveData(1, orderTaxi.getCompanyId(), 4, orderTaxi.getId(), 2, reassign.getMoney());
-                        break;
-                    case 4:
-                        OrderLogistics orderLogistics = orderLogisticsService.selectById(reassign.getOrderId());
-                        orderLogistics.setOldState(orderLogistics.getState());
-                        orderLogistics.setState(11);
-                        orderLogistics.setReassignNotice(2);
-                        orderLogisticsService.updateById(orderLogistics);
-
-                        //添加已收入明细
-                        incomeService.saveData(1, orderLogistics.getCompanyId(), 4, orderLogistics.getId(), orderLogistics.getType(), reassign.getMoney());
-                        break;
-                    case 5:
-                        OrderLogistics orderLogistics1 = orderLogisticsService.selectById(reassign.getOrderId());
-                        orderLogistics1.setOldState(orderLogistics1.getState());
-                        orderLogistics1.setState(11);
-                        orderLogistics1.setReassignNotice(2);
-                        orderLogisticsService.updateById(orderLogistics1);
-
-                        //添加已收入明细
-                        incomeService.saveData(1, orderLogistics1.getCompanyId(), 4, orderLogistics1.getId(), orderLogistics1.getType(), reassign.getMoney());
-                        break;
-                }
-
-                systemNoticeService.addSystemNotice(2, "您已使用余额成功支付改派申请费用!", uid);
-                //开始推送调度单
-                Map<String, String> map = new HashMap<>();
-                map.put("orderId", reassign.getOrderId().toString());
-                map.put("orderType", reassign.getOrderType().toString());
-                List<Dispatch> dispatches = dispatchMapper.queryDispatchs(driver.getFranchiseeId() == null ? driver.getCompanyId() : driver.getFranchiseeId(), 1);
+                if(reassign.getPayType() == 3){//余额
+                    reassign.setState(2);
+                    reassign.setPayTime(new Date());
+                    reassignMapper.updateById(reassign);
+            
+                    Double balance = driver.getBalance();
+                    Double laveBusinessMoney = driver.getLaveBusinessMoney();
+                    Double laveActivityMoney = driver.getLaveActivityMoney();
+                    if(null == balance || balance < aDouble){
+                        throw new SystemException("账户余额不足");
+                    }
+                    if(null != laveBusinessMoney && laveBusinessMoney.compareTo(aDouble) >= 0){
+                        driver.setLaveBusinessMoney(new BigDecimal(laveBusinessMoney).subtract(new BigDecimal(aDouble)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+                    }else if(null != laveActivityMoney && laveActivityMoney.compareTo(aDouble) >= 0){
+                        driver.setLaveActivityMoney(new BigDecimal(laveActivityMoney).subtract(new BigDecimal(aDouble)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+                    }
+                    driver.setBalance(new BigDecimal(balance).subtract(new BigDecimal(aDouble)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+                    driverService.updateById(driver);
+                    //添加交易明细
+                    transactionDetailsService.saveData(uid, "司机改派支付", aDouble, 2, 1, 2, reassign.getOrderType(), reassign.getOrderId());
+            
+            
+                    //修改改派通知状态
+                    switch (reassign.getOrderType()){
+                        case 1:
+                            OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(reassign.getOrderId());
+                            orderPrivateCar.setOldState(orderPrivateCar.getState());
+                            orderPrivateCar.setState(11);
+                            orderPrivateCar.setReassignNotice(2);
+                            orderPrivateCarService.updateById(orderPrivateCar);
+                    
+                            //添加已收入明细
+                            incomeService.saveData(1, orderPrivateCar.getCompanyId(), 4, orderPrivateCar.getId(), 1, reassign.getMoney());
+                            break;
+                        case 2:
+                            OrderTaxi orderTaxi = orderTaxiService.selectById(reassign.getOrderId());
+                            orderTaxi.setOldState(orderTaxi.getState());
+                            orderTaxi.setState(11);
+                            orderTaxi.setReassignNotice(2);
+                            orderTaxiService.updateById(orderTaxi);
+                    
+                            //添加已收入明细
+                            incomeService.saveData(1, orderTaxi.getCompanyId(), 4, orderTaxi.getId(), 2, reassign.getMoney());
+                            break;
+                        case 4:
+                            OrderLogistics orderLogistics = orderLogisticsService.selectById(reassign.getOrderId());
+                            orderLogistics.setOldState(orderLogistics.getState());
+                            orderLogistics.setState(11);
+                            orderLogistics.setReassignNotice(2);
+                            orderLogisticsService.updateById(orderLogistics);
+                    
+                            //添加已收入明细
+                            incomeService.saveData(1, orderLogistics.getCompanyId(), 4, orderLogistics.getId(), orderLogistics.getType(), reassign.getMoney());
+                            break;
+                        case 5:
+                            OrderLogistics orderLogistics1 = orderLogisticsService.selectById(reassign.getOrderId());
+                            orderLogistics1.setOldState(orderLogistics1.getState());
+                            orderLogistics1.setState(11);
+                            orderLogistics1.setReassignNotice(2);
+                            orderLogisticsService.updateById(orderLogistics1);
+                    
+                            //添加已收入明细
+                            incomeService.saveData(1, orderLogistics1.getCompanyId(), 4, orderLogistics1.getId(), orderLogistics1.getType(), reassign.getMoney());
+                            break;
+                    }
+            
+                    systemNoticeService.addSystemNotice(2, "您已使用余额成功支付改派申请费用!", uid);
+                    //开始推送调度单
+                    Map<String, String> map = new HashMap<>();
+                    map.put("orderId", reassign.getOrderId().toString());
+                    map.put("orderType", reassign.getOrderType().toString());
+                    List<Dispatch> dispatches = dispatchMapper.queryDispatchs(driver.getFranchiseeId() == null ? driver.getCompanyId() : driver.getFranchiseeId(), 1);
 //                for(Dispatch dispatch : dispatches){
 //                    jgPushUtil.push(2,"有新的改派订单需要处理,请及时处理!", "订单改派", map, "DISPATCH" + dispatch.getId());
 //                }
+                }
             }
+        }catch (Exception e){
+            e.printStackTrace();
+        }finally {
+            redisUtil.unlock(reassign.getOrderId() + "_reassign");
         }
         return resultUtil;
     }
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