zero 11 ماه پیش
والد
کامیت
2af78473a3

+ 34 - 6
PCS/src/main/java/cn/cslg/permission/common/utils/RandomUtil.java

@@ -1,9 +1,22 @@
 package cn.cslg.permission.common.utils;
 
+import java.security.SecureRandom;
 import java.util.Random;
 
 public class RandomUtil {
 
+    // 定义可用来生成邀请码的字符集
+    private static final String CHARACTERS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
+    // 定义邀请码的长度
+    private static final int CODE_LENGTH = 8;
+
+    private static String[] STR_ARR = new String[] { "a", "b", "c", "d", "e",
+            "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r",
+            "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E",
+            "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
+            "S", "T", "U", "V", "W", "X", "Y", "Z", "1", "2", "3", "4", "5",
+            "6", "7", "8", "9", "0" };
+
     /**
      * 随机验证码
      * @return
@@ -11,12 +24,12 @@ public class RandomUtil {
     public static String getSixRandom(){
         return String.valueOf((int) ((Math.random() * 9 + 1) * Math.pow(10, 5)));
     }
-    private static String[] STR_ARR = new String[] { "a", "b", "c", "d", "e",
-            "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r",
-            "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E",
-            "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
-            "S", "T", "U", "V", "W", "X", "Y", "Z", "1", "2", "3", "4", "5",
-            "6", "7", "8", "9", "0" };
+
+    /**
+     * 随机生成code码的方法
+     * @param length
+     * @return
+     */
     public static String generateRandomString(int length) {
         StringBuilder sb = new StringBuilder();
         Random rand = new Random();
@@ -26,5 +39,20 @@ public class RandomUtil {
         return sb.toString();
     }
 
+    /**
+     * 生成随机邀请码的方法
+     *
+     * @return 生成的邀请码
+     */
+    public static String generateInvitationCode() {
+        SecureRandom random = new SecureRandom();
+        StringBuilder codeBuilder = new StringBuilder(CODE_LENGTH);
 
+        for (int i = 0; i < CODE_LENGTH; i++) {
+            int index = random.nextInt(CHARACTERS.length());
+            codeBuilder.append(CHARACTERS.charAt(index));
+        }
+
+        return codeBuilder.toString();
+    }
 }

+ 6 - 0
PCS/src/main/java/cn/cslg/permission/controller/LoginController.java

@@ -102,4 +102,10 @@ public class LoginController {
         PhoneLoginVO loginVO = loginService.loginByPhone(vo);
         return Response.success(loginVO);
     }
+
+    @Operation(summary = "生成邀请链接")
+    @PostMapping(value = "/generateInvitationCode")
+    public String generateInvitationCode() throws Exception {
+        return loginService.generateInvitationCode();
+    }
 }

+ 27 - 0
PCS/src/main/java/cn/cslg/permission/domain/PersonInvitationCode.java

@@ -0,0 +1,27 @@
+package cn.cslg.permission.domain;
+
+import cn.cslg.permission.common.model.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = true)
+@TableName(value = "PERSON_INVITATION_CODE")
+public class PersonInvitationCode extends BaseEntity<PersonInvitationCode> {
+
+    /**
+     * 人员id
+     */
+    @TableField(value = "PERSON_ID")
+    private Integer personId;
+
+    /**
+     * 人员账号
+     */
+    @TableField(value = "INVITATION_CODE")
+    private String invitationCode;
+}

+ 9 - 0
PCS/src/main/java/cn/cslg/permission/mapper/PersonInvitationCodeMapper.java

@@ -0,0 +1,9 @@
+package cn.cslg.permission.mapper;
+
+import cn.cslg.permission.domain.PersonInvitationCode;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface PersonInvitationCodeMapper extends BaseMapper<PersonInvitationCode> {
+}

+ 31 - 4
PCS/src/main/java/cn/cslg/permission/service/LoginService.java

@@ -10,15 +10,13 @@ import cn.cslg.permission.common.model.dto.SendCodeDTO;
 import cn.cslg.permission.common.model.vo.*;
 import cn.cslg.permission.common.utils.*;
 import cn.cslg.permission.common.utils.message.MessageUtils;
-import cn.cslg.permission.domain.Function;
-import cn.cslg.permission.domain.Personnel;
-import cn.cslg.permission.domain.ReSetPasswordDTO;
-import cn.cslg.permission.domain.Tenant;
+import cn.cslg.permission.domain.*;
 import cn.cslg.permission.domain.associate.AssoFunctionModule;
 import cn.cslg.permission.domain.associate.AssoPersonnelMachine;
 import cn.cslg.permission.exception.ExceptionEnum;
 import cn.cslg.permission.exception.XiaoShiException;
 import cn.cslg.permission.mapper.FunctionMapper;
+import cn.cslg.permission.mapper.PersonInvitationCodeMapper;
 import cn.cslg.permission.mapper.PersonnelMapper;
 import cn.cslg.permission.mapper.associate.AssoFunctionModuleMapper;
 import cn.cslg.permission.mapper.associate.AssoPersonnelMachineMapper;
@@ -44,11 +42,13 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.lang.System;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 
@@ -62,6 +62,8 @@ import java.util.concurrent.TimeUnit;
 @Service
 @RequiredArgsConstructor(onConstructor_ = {@Lazy})
 public class LoginService extends ServiceImpl<PersonnelMapper, Personnel> {
+    @Value("${inviteSignInLink}")
+    private String inviteSignInLink;
     private final RedisUtil redisUtil;
     private final CacheUtils cacheUtils;
     private final TenantService tenantService;
@@ -83,6 +85,8 @@ public class LoginService extends ServiceImpl<PersonnelMapper, Personnel> {
     private AssoPersonnelMachineMapper assoPersonnelMachineMapper;
     @Autowired
     private AssoFunctionModuleMapper assoFunctionModuleMapper;
+    @Autowired
+    private PersonInvitationCodeMapper personInvitationCodeMapper;
 
     /**
      * @param loginVO 登录参数类
@@ -659,4 +663,27 @@ public class LoginService extends ServiceImpl<PersonnelMapper, Personnel> {
         loginVO.setToken(StpUtil.getTokenValue());
         return loginVO;
     }
+
+    public String generateInvitationCode() {
+        Integer userId = null;
+        try {
+            userId = StpUtil.getLoginIdAsInt();
+            PersonInvitationCode assoPersoninvitationCode = personInvitationCodeMapper.selectOne(new LambdaQueryWrapper<PersonInvitationCode>()
+                    .eq(PersonInvitationCode::getPersonId, userId));
+            String invitationCode = "";
+            if (ObjectUtils.isEmpty(assoPersoninvitationCode)) {
+                PersonInvitationCode personInvitationCode = new PersonInvitationCode();
+                personInvitationCode.setPersonId(userId);
+                personInvitationCode.setInvitationCode(RandomUtil.generateInvitationCode());
+                personInvitationCode.setCreateUser(userId);
+                personInvitationCode.insert();
+                invitationCode = personInvitationCode.getInvitationCode();
+            } else {
+                invitationCode = assoPersoninvitationCode.getInvitationCode();
+            }
+            return Response.success(inviteSignInLink + "?invitationCode=" + invitationCode);
+        } catch (Exception e) {
+            return Response.success(inviteSignInLink);
+        }
+    }
 }

+ 2 - 0
PCS/src/main/resources/application-dev.yml

@@ -41,6 +41,8 @@ spring:
       web-stat-filter:
         exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
 queueName: emailProd.queue
+##################  邀请注册页面 ####################
+inviteSignInLink: http://xsip.cn/signIn
 ##################  短信 ####################
 SMS:
   regionId: cn-shanghai

+ 2 - 0
PCS/src/main/resources/application-prodNetIn.yml

@@ -44,6 +44,8 @@ springdoc:
   api-docs:
     enabled: false
 queueName: emailProd.queue
+##################  邀请注册页面 ####################
+inviteSignInLink: http://xsip.cn/signIn
 ##################  短信 ####################
 SMS:
   regionId: cn-shanghai

+ 2 - 0
PCS/src/main/resources/application-prodNetOut.yml

@@ -41,6 +41,8 @@ spring:
       web-stat-filter:
         exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
 queueName: emailProd.queue
+##################  邀请注册页面 ####################
+inviteSignInLink: http://xsip.cn/signIn
 ##################  短信 ####################
 SMS:
   regionId: cn-shanghai

+ 2 - 0
PCS/src/main/resources/application-testNetIn.yml

@@ -41,6 +41,8 @@ spring:
       web-stat-filter:
         exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
 queueName: emailTest.queue
+##################  邀请注册页面 ####################
+inviteSignInLink: http://xsip.cn/signIn
 ##################  短信 ####################
 SMS:
   regionId: cn-shanghai

+ 2 - 0
PCS/src/main/resources/application-testNetOut.yml

@@ -41,6 +41,8 @@ spring:
       web-stat-filter:
         exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
 queueName: emailTest.queue
+##################  邀请注册页面 ####################
+inviteSignInLink: http://xsip.cn/signIn
 ##################  短信 ####################
 SMS:
   regionId: cn-shanghai

+ 16 - 0
PCS/src/test/java/cn/cslg/permission/EncryptionPersonTest.java

@@ -8,6 +8,7 @@ import cn.cslg.permission.common.model.dto.SendCodeDTO;
 import cn.cslg.permission.common.model.personnel.UploadPersonnelConfigDTO;
 import cn.cslg.permission.common.model.vo.PhoneLoginVO;
 import cn.cslg.permission.common.utils.RSAUtils;
+import cn.cslg.permission.common.utils.RandomUtil;
 import cn.cslg.permission.service.LoginService;
 import cn.cslg.permission.service.PersonnelService;
 import cn.hutool.crypto.SecureUtil;
@@ -111,4 +112,19 @@ public class EncryptionPersonTest {
         PhoneLoginVO loginVO = loginService.loginByPhone(vo);
         System.out.println(loginVO);
     }
+
+    @Test
+    public void test111() {
+        final String randomString = RandomUtil.generateRandomString(8);
+        System.out.println(randomString);
+
+        final String invitationCode = RandomUtil.generateInvitationCode();
+        System.out.println(invitationCode);
+    }
+
+    @Test
+    public void generateInvitationCode() {
+        final String invitationCode = loginService.generateInvitationCode();
+        System.out.println(invitationCode);
+    }
 }

+ 21 - 0
PCS/src/test/java/cn/cslg/permission/WritingAidTest.java

@@ -148,4 +148,25 @@ public class WritingAidTest {
         String res = Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
         System.out.println(res);
     }
+
+    @Test
+    public void generateInvitationCodePCSTest2() throws IOException {
+        String token = "89_9iJkukncP5zspe_8EuigjI7tPxllFKk__";
+        UploadPersonnelConfigDTO vo = new UploadPersonnelConfigDTO();
+        String param = new Gson().toJson(vo);
+
+        RequestBody requestBody = RequestBody.create(MediaType.parse("application/json"), "");
+        OkHttpClient okHttpClient = new OkHttpClient.Builder()
+                .connectTimeout(60, TimeUnit.SECONDS)
+                .writeTimeout(60, TimeUnit.SECONDS)
+                .readTimeout(60, TimeUnit.SECONDS)
+                .build();
+        Request request = new Request.Builder()
+                .url("http://47.116.194.135:8085" + "/api/permission/api/admin/generateInvitationCode")
+                .addHeader("Cookie", "token="+token)
+                .post(requestBody)
+                .build();
+        String res = Objects.requireNonNull(okHttpClient.newCall(request).execute().body()).string();
+        System.out.println(res);
+    }
 }