Ver código fonte

code sk v0.01

(cherry picked from commit 3d151de675afd2bf21fba5209a1b4ec069e56ea1)
MOKASZ\lw12420 1 ano atrás
pai
commit
b2a1b838b0

+ 50 - 0
launch-admin/src/main/java/com/webflux/launchadmin/mysql/service/customCode/CustomCodeServer.java

@@ -0,0 +1,50 @@
+package com.webflux.launchadmin.mysql.service.customCode;
+
+import com.webflux.launchadmin.utils.RandomStr;
+import jakarta.annotation.Resource;
+import org.jetbrains.annotations.NotNull;
+import org.springframework.data.r2dbc.core.R2dbcEntityTemplate;
+import org.springframework.data.relational.core.query.Criteria;
+import org.springframework.data.relational.core.query.Query;
+import org.springframework.stereotype.Service;
+import reactor.core.publisher.Mono;
+
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
+@Service
+public class CustomCodeServer {
+
+    private final ConcurrentHashMap<Object, Lock> lockMap = new ConcurrentHashMap<>();
+    @Resource
+    private R2dbcEntityTemplate template;
+
+    @NotNull
+    public <T> Mono<String> getCode(Class<T> objClass){
+        Lock lock = lockMap.computeIfAbsent(objClass, k -> new ReentrantLock());
+        try {
+            lock.lock();
+            return getCount(objClass);
+        } finally {
+            lock.unlock();
+        }
+    }
+
+    /**
+     * 随机 数据库 验证
+     * @param objClass
+     * @param <T>
+     * @return
+     */
+    @NotNull
+    private <T> Mono<String> getCount(Class<T> objClass) {
+        String newCode = RandomStr.generateUniqueId1();
+        return template.count(Query.query(Criteria.where("code").is(newCode)), objClass).flatMap(count->{
+            if(count>0){
+              return   getCount(objClass);
+            }
+            return Mono.just(newCode);
+        });
+    }
+}

+ 28 - 0
launch-admin/src/main/java/com/webflux/launchadmin/utils/RandomStr.java

@@ -4,11 +4,15 @@ import cn.hutool.core.util.RandomUtil;
 
 import java.util.List;
 import java.util.Objects;
+import java.util.UUID;
 
 public  class RandomStr {
     private   static final List<String> list1 = List.of("07e3138d92454920b975c5a07d8c0e17", "835c9959339f495d921d6555c03aa6dc","057ef6fddb394f7080350bd9237575ba");
     private   static final List<String> list2 = List.of("weixin.qq.com", "baidu.com", "sina.com", "qq.com", "apple.com.cn", "apple.com", "huawei.com", "mi.com", "jd.com");
     private  static  final  String RandomString="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
+    private static final  String  StrRandomAll="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
+
+
     public static String getRandomStr(String code){
         if(Objects.isNull(code)||!list1.contains(code)){
             return RandomUtil.randomString(RandomString, 7);
@@ -19,4 +23,28 @@ public  class RandomStr {
         }
 
     }
+
+    public static String generateUniqueId1() {
+        return RandomUtil.randomString(StrRandomAll, 6);
+       // return UUID.randomUUID().toString().substring(0, 6);
+    }
+
+
+    public static String base62Encode(long value) {
+        final String base62 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
+        StringBuilder sb = new StringBuilder();
+        while (value > 0) {
+            sb.append(base62.charAt((int)(value % 62)));
+            value /= 62;
+        }
+        while (sb.length() < 6) {
+            sb.insert(0, '0');
+        }
+        return sb.reverse().toString();
+    }
+
+    public static String generateUniqueId2() {
+        return base62Encode(System.currentTimeMillis() % 1000000);
+    }
+
 }