夏文涛 1 год назад
Родитель
Сommit
f0a9082583

+ 12 - 7
src/main/java/com/sqx/modules/errand/service/impl/TbIndentServiceImpl.java

@@ -931,13 +931,15 @@ public class TbIndentServiceImpl extends ServiceImpl<TbIndentDao, TbIndent> impl
     public Result orderRiderDelivery(Long userId, OrderRiderDeliveryDTO orderDeliveryDTO) {
         // 添加拍照发短信逻辑
         // 因为原有的确认送达方法代码比较凌乱,且不好重新封装,所以这里就在原有确认收货方法之前添加拍照发短信逻辑
-        try{
-            String acquireCode = orderDeliveryDTO.getAcquireCode();
-            TbIndent indentOrder = tbIndentDao.findIndentByOrderId(acquireCode);
-            if (ObjectUtil.isNull(indentOrder)) {
-                throw new SqxException("扫码无效的跑腿订单id");
-            }
+        String acquireCode = orderDeliveryDTO.getAcquireCode();
+        TbIndent indentOrder = tbIndentDao.findIndentByOrderId(acquireCode);
+        if (ObjectUtil.isNull(indentOrder)) {
+            throw new SqxException("扫码无效的跑腿订单id");
+        }
 
+        RLock lock = redissonClient.getLock(String.format(RedisKey.UPDATE_INDENT_LOCK, indentOrder.getIndentNumber()));
+        lock.lock();
+        try{
             // 如果是外卖订单
             if (ObjectUtil.equal(indentOrder.getIndentType(), "5")) {
                 orderHandTakeoutOrder(indentOrder, userId, orderDeliveryDTO);
@@ -948,6 +950,9 @@ public class TbIndentServiceImpl extends ServiceImpl<TbIndentDao, TbIndent> impl
             log.error("完成订单异常:"+e.getMessage(),e);
             throw new SqxException(e.getMessage());
         }
+        finally {
+            lock.unlock();
+        }
     }
 
     /**
@@ -1781,4 +1786,4 @@ public class TbIndentServiceImpl extends ServiceImpl<TbIndentDao, TbIndent> impl
                 }
                 String contents = "订单已完成,服务费将在稍后返回到您的账户";
                 userService.pushToSingle(title, contents, riderEntity.getClientid());
-            }*/
+            }*/