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 ++++++++++++++++++++++++++++------------------------
 1 files changed, 142 insertions(+), 120 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;
     }

--
Gitblit v1.7.1