Przeglądaj źródła

feat(family): addMember 同步创建无 openid 的 user 记录(不可登录成员)

iwt 2 tygodni temu
rodzic
commit
a96dfd01db

+ 35 - 3
cfc-backend/src/main/java/com/etotem/cfc/service/FamilyMemberService.java

@@ -127,20 +127,52 @@ public class FamilyMemberService {
         member.setCreatedAt(new Date());
         member.setUpdatedAt(new Date());
 
-        // 手机号匹配:查找是否有同手机号的已注册用户
+        // 【重构】成员创建:同步创建 user 记录(无 openid = 不可登录)
+        // 1) 若填写了手机号且已存在同手机号用户 → 复用该 user(绑定 userId)
+        // 2) 若填写了手机号但不存在 → 创建无 openid 的 user,预留未来注册复用
+        // 3) 未填写手机号 → 创建无 openid 的 user
+        Long memberUserId = null;
         if (dto.getPhone() != null && !dto.getPhone().isEmpty()) {
             User matchedUser = userMapper.selectOne(
                     new LambdaQueryWrapper<User>().eq(User::getPhone, dto.getPhone()));
             if (matchedUser != null) {
-                member.setUserId(matchedUser.getId());
+                memberUserId = matchedUser.getId();
                 // 将匹配到的用户加入同一家庭(如果尚未加入)
                 if (matchedUser.getFamilyId() == null) {
                     matchedUser.setFamilyId(familyId);
                     matchedUser.setUpdatedAt(new Date());
                     userMapper.updateById(matchedUser);
                 }
+            } else {
+                // 创建预留用户(无 openid,后续同手机号注册时复用)
+                User newUser = new User();
+                newUser.setOpenid("");
+                newUser.setUnionid("");
+                newUser.setRole("parent"); // 无 child 角色,统一 parent 兜底(实际不可登录)
+                newUser.setNickname(dto.getNickname().trim());
+                newUser.setPhone(dto.getPhone());
+                newUser.setFamilyId(familyId);
+                newUser.setPassword(""); // 初始密码为空,切换保护密码后续由用户设置
+                newUser.setCreatedAt(new Date());
+                newUser.setUpdatedAt(new Date());
+                userMapper.insert(newUser);
+                memberUserId = newUser.getId();
             }
-        }
+        } else {
+            // 未填手机号:创建无 openid 的 user(昵称必须非空)
+            User newUser = new User();
+            newUser.setOpenid("");
+            newUser.setUnionid("");
+            newUser.setRole("parent");
+            newUser.setNickname(dto.getNickname().trim());
+            newUser.setFamilyId(familyId);
+            newUser.setPassword("");
+            newUser.setCreatedAt(new Date());
+            newUser.setUpdatedAt(new Date());
+            userMapper.insert(newUser);
+            memberUserId = newUser.getId();
+        }
+        member.setUserId(memberUserId);
 
         familyMemberMapper.insert(member);