From 53c315297a3906e567b01107a85836528a664206 Mon Sep 17 00:00:00 2001
From: seatonwan9
Date: 星期二, 19 八月 2025 18:11:38 +0800
Subject: [PATCH] 产品订购sql

---
 src/main/java/com/webmanage/service/impl/TokenServiceImpl.java |   45 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 45 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/webmanage/service/impl/TokenServiceImpl.java b/src/main/java/com/webmanage/service/impl/TokenServiceImpl.java
new file mode 100644
index 0000000..964e8b4
--- /dev/null
+++ b/src/main/java/com/webmanage/service/impl/TokenServiceImpl.java
@@ -0,0 +1,45 @@
+package com.webmanage.service.impl;
+
+import com.webmanage.service.TokenService;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.UUID;
+import java.util.concurrent.TimeUnit;
+
+@Service
+public class TokenServiceImpl implements TokenService {
+
+    private static final String IDEMPOTENCY_TOKEN_PREFIX = "idempotency:token:";
+    private static final long DEFAULT_EXPIRE_SECONDS = 60 * 5; // 5鍒嗛挓
+
+    @Resource
+    private RedisTemplate<String, Object> redisTemplate;
+
+    @Override
+    public String generateToken(Long userId) {
+        String token = UUID.randomUUID().toString().replace("-", "");
+        String key = IDEMPOTENCY_TOKEN_PREFIX + token;
+        // 鍊间笉閲嶈锛岃缃竴涓爣璁板嵆鍙�
+        redisTemplate.opsForValue().set(key, userId == null ? 0L : userId, DEFAULT_EXPIRE_SECONDS, TimeUnit.SECONDS);
+        return token;
+    }
+
+    @Override
+    public boolean verifyAndConsume(String token) {
+        if (token == null || token.isEmpty()) {
+            return false;
+        }
+        String key = IDEMPOTENCY_TOKEN_PREFIX + token;
+        Boolean existed = redisTemplate.hasKey(key);
+        if (Boolean.TRUE.equals(existed)) {
+            // 娑堣垂鍚庡垹闄わ紝纭繚涓�娆℃��
+            redisTemplate.delete(key);
+            return true;
+        }
+        return false;
+    }
+}
+
+

--
Gitblit v1.8.0