|
@@ -100,17 +100,9 @@ private FamilyInvitationService familyInvitationService;
|
|
|
// 5. 完全查不到 → 全新用户,自动创建
|
|
// 5. 完全查不到 → 全新用户,自动创建
|
|
|
isNewUser = true;
|
|
isNewUser = true;
|
|
|
|
|
|
|
|
- Family family = new Family();
|
|
|
|
|
- family.setName("我的家庭");
|
|
|
|
|
- family.setInviteCode(generateInviteCode());
|
|
|
|
|
- family.setCreatedAt(new Date());
|
|
|
|
|
- family.setUpdatedAt(new Date());
|
|
|
|
|
- familyMapper.insert(family);
|
|
|
|
|
-
|
|
|
|
|
user = new User();
|
|
user = new User();
|
|
|
user.setOpenid(openid);
|
|
user.setOpenid(openid);
|
|
|
user.setUnionid(unionid != null ? unionid : "");
|
|
user.setUnionid(unionid != null ? unionid : "");
|
|
|
- user.setFamilyId(family.getId());
|
|
|
|
|
user.setRole("parent");
|
|
user.setRole("parent");
|
|
|
user.setNickname(dto.getNickname() != null ? dto.getNickname() : (phone != null ? "用户" + phone.substring(7) : "微信用户"));
|
|
user.setNickname(dto.getNickname() != null ? dto.getNickname() : (phone != null ? "用户" + phone.substring(7) : "微信用户"));
|
|
|
user.setAvatar(dto.getAvatar());
|
|
user.setAvatar(dto.getAvatar());
|
|
@@ -139,9 +131,6 @@ private FamilyInvitationService familyInvitationService;
|
|
|
userMapper.updateById(user);
|
|
userMapper.updateById(user);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // P3: admin创建的用户可能 familyId=0L,懒创建家庭
|
|
|
|
|
- ensureUserHasFamily(user);
|
|
|
|
|
-
|
|
|
|
|
// 管理员不能登录小程序
|
|
// 管理员不能登录小程序
|
|
|
if ("admin".equals(user.getRole())) {
|
|
if ("admin".equals(user.getRole())) {
|
|
|
throw new RuntimeException("该账号不允许登录小程序");
|
|
throw new RuntimeException("该账号不允许登录小程序");
|
|
@@ -187,20 +176,12 @@ private FamilyInvitationService familyInvitationService;
|
|
|
boolean isNewUser = false;
|
|
boolean isNewUser = false;
|
|
|
|
|
|
|
|
if (user == null) {
|
|
if (user == null) {
|
|
|
- // 新用户,创建新家庭和用户
|
|
|
|
|
|
|
+ // 新用户,仅创建用户(家庭待首次使用家庭功能时创建)
|
|
|
isNewUser = true;
|
|
isNewUser = true;
|
|
|
|
|
|
|
|
- Family family = new Family();
|
|
|
|
|
- family.setName("我的家庭");
|
|
|
|
|
- family.setInviteCode(generateInviteCode());
|
|
|
|
|
- family.setCreatedAt(new Date());
|
|
|
|
|
- family.setUpdatedAt(new Date());
|
|
|
|
|
- familyMapper.insert(family);
|
|
|
|
|
-
|
|
|
|
|
user = new User();
|
|
user = new User();
|
|
|
user.setOpenid("phone:" + phone);
|
|
user.setOpenid("phone:" + phone);
|
|
|
user.setUnionid("");
|
|
user.setUnionid("");
|
|
|
- user.setFamilyId(family.getId());
|
|
|
|
|
// 默认角色为家长,可以被覆盖
|
|
// 默认角色为家长,可以被覆盖
|
|
|
user.setRole(dto.getRole() != null ? dto.getRole() : "parent");
|
|
user.setRole(dto.getRole() != null ? dto.getRole() : "parent");
|
|
|
user.setNickname(dto.getNickname() != null ? dto.getNickname() : "用户" + phone.substring(7));
|
|
user.setNickname(dto.getNickname() != null ? dto.getNickname() : "用户" + phone.substring(7));
|
|
@@ -212,10 +193,6 @@ private FamilyInvitationService familyInvitationService;
|
|
|
user.setCreatedAt(new Date());
|
|
user.setCreatedAt(new Date());
|
|
|
user.setUpdatedAt(new Date());
|
|
user.setUpdatedAt(new Date());
|
|
|
userMapper.insert(user);
|
|
userMapper.insert(user);
|
|
|
-
|
|
|
|
|
- // 设置家庭创建者
|
|
|
|
|
- family.setCreatorId(user.getId());
|
|
|
|
|
- familyMapper.updateById(family);
|
|
|
|
|
try { onboardingService.initForUser(user.getId()); onboardingService.completeTask(user.getId(), "REGISTER"); } catch (Exception e) { /* onboarding init failure should not block login */ }
|
|
try { onboardingService.initForUser(user.getId()); onboardingService.completeTask(user.getId(), "REGISTER"); } catch (Exception e) { /* onboarding init failure should not block login */ }
|
|
|
} else {
|
|
} else {
|
|
|
// 老用户,更新信息(如果提供了)
|
|
// 老用户,更新信息(如果提供了)
|
|
@@ -225,7 +202,6 @@ private FamilyInvitationService familyInvitationService;
|
|
|
if (dto.getAvatar() != null && !dto.getAvatar().isEmpty()) {
|
|
if (dto.getAvatar() != null && !dto.getAvatar().isEmpty()) {
|
|
|
user.setAvatar(dto.getAvatar());
|
|
user.setAvatar(dto.getAvatar());
|
|
|
}
|
|
}
|
|
|
- ensureUserHasFamily(user); // P3: admin创建的用户可能 familyId=0L,懒创建家庭
|
|
|
|
|
user.setUpdatedAt(new Date());
|
|
user.setUpdatedAt(new Date());
|
|
|
userMapper.updateById(user);
|
|
userMapper.updateById(user);
|
|
|
}
|
|
}
|
|
@@ -287,9 +263,6 @@ private FamilyInvitationService familyInvitationService;
|
|
|
user.setUpdatedAt(new Date());
|
|
user.setUpdatedAt(new Date());
|
|
|
userMapper.updateById(user);
|
|
userMapper.updateById(user);
|
|
|
|
|
|
|
|
- // 3. 懒创建家庭(admin创建的用户可能 familyId=0L)
|
|
|
|
|
- ensureUserHasFamily(user);
|
|
|
|
|
-
|
|
|
|
|
// 4. 生成token
|
|
// 4. 生成token
|
|
|
String token = jwtConfig.generateToken(user.getId(), user.getRole());
|
|
String token = jwtConfig.generateToken(user.getId(), user.getRole());
|
|
|
|
|
|
|
@@ -324,9 +297,6 @@ private FamilyInvitationService familyInvitationService;
|
|
|
return null;
|
|
return null;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 懒创建家庭(admin创建的用户可能 familyId=0L)
|
|
|
|
|
- ensureUserHasFamily(user);
|
|
|
|
|
-
|
|
|
|
|
String token = jwtConfig.generateToken(user.getId(), user.getRole());
|
|
String token = jwtConfig.generateToken(user.getId(), user.getRole());
|
|
|
|
|
|
|
|
LoginResultDTO result = new LoginResultDTO();
|
|
LoginResultDTO result = new LoginResultDTO();
|
|
@@ -384,19 +354,10 @@ private FamilyInvitationService familyInvitationService;
|
|
|
* 直接注册(测试环境:不验证验证码)
|
|
* 直接注册(测试环境:不验证验证码)
|
|
|
*/
|
|
*/
|
|
|
public LoginResultDTO directRegister(DirectRegisterDTO dto) {
|
|
public LoginResultDTO directRegister(DirectRegisterDTO dto) {
|
|
|
- // 创建家庭
|
|
|
|
|
- Family family = new Family();
|
|
|
|
|
- family.setName("我的家庭");
|
|
|
|
|
- family.setInviteCode(generateInviteCode());
|
|
|
|
|
- family.setCreatedAt(new Date());
|
|
|
|
|
- family.setUpdatedAt(new Date());
|
|
|
|
|
- familyMapper.insert(family);
|
|
|
|
|
-
|
|
|
|
|
- // 创建用户
|
|
|
|
|
|
|
+ // 创建用户(家庭待首次使用家庭功能时创建,或通过邀请码加入)
|
|
|
User user = new User();
|
|
User user = new User();
|
|
|
user.setOpenid("phone:" + dto.getPhone());
|
|
user.setOpenid("phone:" + dto.getPhone());
|
|
|
user.setUnionid("");
|
|
user.setUnionid("");
|
|
|
- user.setFamilyId(family.getId());
|
|
|
|
|
user.setRole(dto.getRole() != null ? dto.getRole() : "parent");
|
|
user.setRole(dto.getRole() != null ? dto.getRole() : "parent");
|
|
|
user.setNickname(dto.getNickname() != null ? dto.getNickname() : "用户" + dto.getPhone().substring(7));
|
|
user.setNickname(dto.getNickname() != null ? dto.getNickname() : "用户" + dto.getPhone().substring(7));
|
|
|
user.setAvatar(dto.getAvatar());
|
|
user.setAvatar(dto.getAvatar());
|
|
@@ -413,7 +374,7 @@ private FamilyInvitationService familyInvitationService;
|
|
|
try {
|
|
try {
|
|
|
joinFamily(user.getId(), dto.getInviteCode());
|
|
joinFamily(user.getId(), dto.getInviteCode());
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
|
- // 忽略邀请码错误,继续使用创建的家庭
|
|
|
|
|
|
|
+ // 忽略邀请码错误
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -756,7 +717,6 @@ private FamilyInvitationService familyInvitationService;
|
|
|
User existingUser = userMapper.selectOne(new LambdaQueryWrapper<User>()
|
|
User existingUser = userMapper.selectOne(new LambdaQueryWrapper<User>()
|
|
|
.eq(User::getIdCard, dto.getIdCard()));
|
|
.eq(User::getIdCard, dto.getIdCard()));
|
|
|
|
|
|
|
|
- Family family;
|
|
|
|
|
User user;
|
|
User user;
|
|
|
|
|
|
|
|
if (existingUser != null) {
|
|
if (existingUser != null) {
|
|
@@ -765,9 +725,8 @@ private FamilyInvitationService familyInvitationService;
|
|
|
throw new RuntimeException("该账号不允许登录小程序");
|
|
throw new RuntimeException("该账号不允许登录小程序");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 如果存在相同身份证的用户,加入其家庭
|
|
|
|
|
|
|
+ // 如果存在相同身份证的用户,沿用其已有信息
|
|
|
user = existingUser;
|
|
user = existingUser;
|
|
|
- family = familyMapper.selectById(user.getFamilyId());
|
|
|
|
|
|
|
|
|
|
// 更新用户信息(昵称和头像可以更新)
|
|
// 更新用户信息(昵称和头像可以更新)
|
|
|
user.setNickname(dto.getNickname());
|
|
user.setNickname(dto.getNickname());
|
|
@@ -777,18 +736,10 @@ private FamilyInvitationService familyInvitationService;
|
|
|
user.setUpdatedAt(new Date());
|
|
user.setUpdatedAt(new Date());
|
|
|
userMapper.updateById(user);
|
|
userMapper.updateById(user);
|
|
|
} else {
|
|
} else {
|
|
|
- // 创建新家庭和用户
|
|
|
|
|
- family = new Family();
|
|
|
|
|
- family.setName("我的家庭");
|
|
|
|
|
- family.setInviteCode(generateInviteCode());
|
|
|
|
|
- family.setCreatedAt(new Date());
|
|
|
|
|
- family.setUpdatedAt(new Date());
|
|
|
|
|
- familyMapper.insert(family);
|
|
|
|
|
-
|
|
|
|
|
|
|
+ // 新用户,仅创建用户(家庭待首次使用家庭功能时创建)
|
|
|
user = new User();
|
|
user = new User();
|
|
|
user.setOpenid("phone:" + dto.getPhone());
|
|
user.setOpenid("phone:" + dto.getPhone());
|
|
|
user.setUnionid("");
|
|
user.setUnionid("");
|
|
|
- user.setFamilyId(family.getId());
|
|
|
|
|
user.setRole("parent");
|
|
user.setRole("parent");
|
|
|
user.setNickname(dto.getNickname());
|
|
user.setNickname(dto.getNickname());
|
|
|
user.setAvatar(dto.getAvatar());
|
|
user.setAvatar(dto.getAvatar());
|
|
@@ -921,29 +872,6 @@ FamilyMember child = familyMemberMapper.selectById(memberId);
|
|
|
return UUID.randomUUID().toString().substring(0, 8).toUpperCase();
|
|
return UUID.randomUUID().toString().substring(0, 8).toUpperCase();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- /**
|
|
|
|
|
- * 确保用户有有效的家庭(懒创建)。
|
|
|
|
|
- * admin创建的用户可能 familyId=0L,需要在此自动创建家庭。
|
|
|
|
|
- * 如果创建了家庭,会持久化 user.familyId 到数据库。
|
|
|
|
|
- */
|
|
|
|
|
- private void ensureUserHasFamily(User user) {
|
|
|
|
|
- if (user.getFamilyId() == null || user.getFamilyId() == 0L) {
|
|
|
|
|
- Family family = new Family();
|
|
|
|
|
- family.setName("我的家庭");
|
|
|
|
|
- family.setInviteCode(generateInviteCode());
|
|
|
|
|
- family.setCreatedAt(new Date());
|
|
|
|
|
- family.setUpdatedAt(new Date());
|
|
|
|
|
- familyMapper.insert(family);
|
|
|
|
|
-
|
|
|
|
|
- family.setCreatorId(user.getId());
|
|
|
|
|
- familyMapper.updateById(family);
|
|
|
|
|
-
|
|
|
|
|
- user.setFamilyId(family.getId());
|
|
|
|
|
- user.setUpdatedAt(new Date());
|
|
|
|
|
- userMapper.updateById(user);
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
private ChildInfoDTO toChildInfoDTO(FamilyMember child) {
|
|
private ChildInfoDTO toChildInfoDTO(FamilyMember child) {
|
|
|
ChildInfoDTO dto = new ChildInfoDTO();
|
|
ChildInfoDTO dto = new ChildInfoDTO();
|
|
|
dto.setId(child.getId());
|
|
dto.setId(child.getId());
|
|
@@ -1193,17 +1121,9 @@ FamilyMember child = familyMemberMapper.selectById(memberId);
|
|
|
|
|
|
|
|
Result<DistributionRelation> distResult = distributionService.findByInviteCode(inviteCode);
|
|
Result<DistributionRelation> distResult = distributionService.findByInviteCode(inviteCode);
|
|
|
if (distResult.getCode() == 200 && distResult.getData() != null) {
|
|
if (distResult.getCode() == 200 && distResult.getData() != null) {
|
|
|
- Family family = new Family();
|
|
|
|
|
- family.setName("我的家庭");
|
|
|
|
|
- family.setInviteCode(generateInviteCode());
|
|
|
|
|
- family.setCreatedAt(new Date());
|
|
|
|
|
- family.setUpdatedAt(new Date());
|
|
|
|
|
- familyMapper.insert(family);
|
|
|
|
|
-
|
|
|
|
|
User user = new User();
|
|
User user = new User();
|
|
|
user.setOpenid("phone:" + phone);
|
|
user.setOpenid("phone:" + phone);
|
|
|
user.setUnionid("");
|
|
user.setUnionid("");
|
|
|
- user.setFamilyId(family.getId());
|
|
|
|
|
user.setRole(role);
|
|
user.setRole(role);
|
|
|
user.setNickname(nickname);
|
|
user.setNickname(nickname);
|
|
|
user.setPhone(phone);
|
|
user.setPhone(phone);
|