zoujiajian 10 hónapja
szülő
commit
c552f421b7

+ 23 - 23
netflix-service/src/main/java/com/cyksj/service/sora/impl/SoraCodeServiceImpl.java

@@ -105,31 +105,31 @@ public class SoraCodeServiceImpl implements SoraCodeService {
             return;
         }
 
-        // 查找一个未使用的sora邀请码
-        SoraCode availableCode = soraCodeMapper.selectOne(
-                new LambdaQueryWrapper<SoraCode>()
-                        .eq(SoraCode::getStatus, false)
-                        .isNull(SoraCode::getUserId)
-                        .isNull(SoraCode::getOrderId)
-                        .last("limit 1")
-        );
+        while (true) {
+            // 查找一个未使用的sora邀请码
+            SoraCode availableCode = soraCodeMapper.selectOne(
+                    new LambdaQueryWrapper<SoraCode>()
+                            .eq(SoraCode::getStatus, false)
+                            .isNull(SoraCode::getUserId)
+                            .isNull(SoraCode::getOrderId)
+                            .last("limit 1")
+            );
 
-        if (availableCode == null) {
-            log.error("没有可用的sora邀请码赠送给用户{},订单{}", userId, orderId);
-            throw new BusinessRuntimeException("暂无可用的sora邀请码");
-        }
+            if (availableCode == null) {
+                log.error("没有可用的sora邀请码赠送给用户{},订单{}", userId, orderId);
+                throw new BusinessRuntimeException("暂无可用的sora邀请码");
+            }
+
+            // 将邀请码绑定给用户和订单
+            availableCode.setUserId(userId);
+            availableCode.setOrderId(orderId);
+            availableCode.setStatus(Boolean.TRUE);
 
-        // 将邀请码绑定给用户和订单
-        availableCode.setUserId(userId);
-        availableCode.setOrderId(orderId);
-        availableCode.setStatus(Boolean.TRUE);
-
-        int updateResult = soraCodeMapper.update(availableCode, Wrappers.lambdaUpdate(SoraCode.class).eq(SoraCode::getId, availableCode.getId()).eq(SoraCode::getStatus, Boolean.FALSE));
-        if (updateResult > 0) {
-            log.info("成功为用户{}订单{}赠送sora邀请码:{}", userId, orderId, availableCode.getCode());
-        } else {
-            log.error("为用户{}订单{}赠送sora邀请码失败", userId, orderId);
-            throw new BusinessRuntimeException("赠送sora邀请码失败");
+            int updateResult = soraCodeMapper.update(availableCode, Wrappers.lambdaUpdate(SoraCode.class).eq(SoraCode::getId, availableCode.getId()).eq(SoraCode::getStatus, Boolean.FALSE));
+            if (updateResult > 0) {
+                log.info("成功为用户{}订单{}赠送sora邀请码:{}", userId, orderId, availableCode.getCode());
+                break;
+            }
         }
     }
 }