wwh недель назад: 3
Родитель
Сommit
8028738c3a

+ 2 - 0
baqing-shop/src/main/java/com/ruoyi/web/modules/account/mapper/BizMemberMapper.java

@@ -17,6 +17,8 @@ public interface BizMemberMapper
17 17
 
18 18
     int countByMobile(@Param("mobile") String mobile, @Param("excludeId") Long excludeId);
19 19
 
20
+    int countByByMemberName(@Param("memberName") String memberName);
21
+
20 22
     int insert(BizMember member);
21 23
 
22 24
     int update(BizMember member);

+ 20 - 20
baqing-shop/src/main/java/com/ruoyi/web/modules/account/service/impl/MemberAppServiceImpl.java

@@ -1,12 +1,5 @@
1 1
 package com.ruoyi.web.modules.account.service.impl;
2 2
 
3
-import java.math.BigDecimal;
4
-import java.util.Date;
5
-import java.util.HashMap;
6
-import java.util.Map;
7
-import org.springframework.beans.factory.annotation.Autowired;
8
-import org.springframework.stereotype.Service;
9
-import org.springframework.transaction.annotation.Transactional;
10 3
 import com.ruoyi.common.exception.ServiceException;
11 4
 import com.ruoyi.common.utils.SecurityUtils;
12 5
 import com.ruoyi.common.utils.StringUtils;
@@ -18,6 +11,15 @@ import com.ruoyi.web.modules.account.mapper.BizMemberMapper;
18 11
 import com.ruoyi.web.modules.account.service.IMemberAppService;
19 12
 import com.ruoyi.web.modules.account.service.IMemberSmsService;
20 13
 import com.ruoyi.web.modules.account.service.IMemberTokenService;
14
+import com.ruoyi.web.modules.account.util.UserNameGenerator;
15
+import org.springframework.beans.factory.annotation.Autowired;
16
+import org.springframework.stereotype.Service;
17
+import org.springframework.transaction.annotation.Transactional;
18
+
19
+import java.math.BigDecimal;
20
+import java.util.Date;
21
+import java.util.HashMap;
22
+import java.util.Map;
21 23
 
22 24
 /**
23 25
  * C 端会员 Service 实现
@@ -53,8 +55,7 @@ public class MemberAppServiceImpl implements IMemberAppService
53 55
         {
54 56
             throw new ServiceException("验证码错误或已过期");
55 57
         }
56
-        String defaultName = "用户" + dto.getMobile().substring(7);
57
-        String memberName = resolveMemberName(dto.getMemberCode(), dto.getNickName(), defaultName);
58
+        String memberName = generateUniqueMemberName();
58 59
         BizMember member = new BizMember();
59 60
         member.setMobile(dto.getMobile());
60 61
         member.setMemberCode(memberName);
@@ -159,16 +160,15 @@ public class MemberAppServiceImpl implements IMemberAppService
159 160
         }
160 161
     }
161 162
 
162
-    private String resolveMemberName(String memberCode, String nickName, String defaultName)
163
-    {
164
-        if (StringUtils.isNotEmpty(memberCode))
165
-        {
166
-            return memberCode;
167
-        }
168
-        if (StringUtils.isNotEmpty(nickName))
169
-        {
170
-            return nickName;
171
-        }
172
-        return defaultName;
163
+    /**
164
+     * 生成并保证唯一的用户名
165
+     */
166
+    public String generateUniqueMemberName() {
167
+        String memberName;
168
+        do {
169
+            memberName = UserNameGenerator.generateUniqueName();
170
+            // 查数据库是否已存在
171
+        } while (memberMapper.countByByMemberName(memberName) > 0);
172
+        return memberName;
173 173
     }
174 174
 }

+ 23 - 0
baqing-shop/src/main/java/com/ruoyi/web/modules/account/util/UserNameGenerator.java

@@ -0,0 +1,23 @@
1
+package com.ruoyi.web.modules.account.util;
2
+
3
+import java.security.SecureRandom;
4
+
5
+public class UserNameGenerator {
6
+
7
+    // 字符池:大小写字母 + 数字(去掉易混淆的 0/O/I/l)
8
+    private static final String CHAR_POOL = "ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz123456789";
9
+    private static final int LENGTH = 8;
10
+    private static final SecureRandom RANDOM = new SecureRandom();
11
+
12
+    /**
13
+     * 生成 8 位唯一随机用户名(如 fUZGEs0Z)
14
+     */
15
+    public static String generateUniqueName() {
16
+        StringBuilder sb = new StringBuilder(LENGTH);
17
+        for (int i = 0; i < LENGTH; i++) {
18
+            int index = RANDOM.nextInt(CHAR_POOL.length());
19
+            sb.append(CHAR_POOL.charAt(index));
20
+        }
21
+        return sb.toString();
22
+    }
23
+}

+ 6 - 0
baqing-shop/src/main/resources/mapper/account/BizMemberMapper.xml

@@ -60,6 +60,12 @@
60 60
         </if>
61 61
     </select>
62 62
 
63
+    <select id="countByByMemberName" resultType="int">
64
+        select count(1) from biz_member
65
+        where member_code = #{memberName} and del_flag = '0'
66
+    </select>
67
+
68
+
63 69
     <select id="selectConsumptionFromOrder" resultType="java.util.HashMap">
64 70
         select count(1) as orderCount, ifnull(sum(pay_amount), 0) as totalAmount
65 71
         from biz_order