|
|
@@ -674,7 +674,41 @@ vo.setIsSelf(viewerMember != null && viewerMember.getId().equals(fm.getId()));
|
|
|
.eq(FamilyMember::getUserId, userId)
|
|
|
.last("LIMIT 1"));
|
|
|
if (member == null) {
|
|
|
- throw new RuntimeException("未找到该用户的家庭成员记录");
|
|
|
+ // 兼容历史孤儿数据:users.family_id 指向旧家庭但 family_members 无该用户成员记录
|
|
|
+ // (早期创建家庭路径漏建创建者成员记录)。旧家庭无能量值资产(按 member_id 关联必然无),
|
|
|
+ // 健康报告按 user_id 关联可能残留,先尝试迁移;再在目标家庭补建成员记录,后续流程自然兼容。
|
|
|
+ try {
|
|
|
+ List<HealthReport> orphanReports = healthReportMapper.selectList(
|
|
|
+ new LambdaQueryWrapper<HealthReport>()
|
|
|
+ .eq(HealthReport::getFamilyId, oldFamilyId)
|
|
|
+ .and(w -> w.eq(HealthReport::getUserId, userId)
|
|
|
+ .or().eq(HealthReport::getSubjectId, userId)));
|
|
|
+ for (HealthReport r : orphanReports) {
|
|
|
+ r.setFamilyId(targetFamilyId);
|
|
|
+ healthReportMapper.updateById(r);
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.warn("孤儿成员健康报告迁移异常: userId={}, oldFamilyId={}", userId, oldFamilyId, e);
|
|
|
+ }
|
|
|
+
|
|
|
+ FamilyMember newMember = new FamilyMember();
|
|
|
+ newMember.setFamilyId(targetFamilyId);
|
|
|
+ newMember.setUserId(userId);
|
|
|
+ newMember.setNickname((user.getNickname() != null && !user.getNickname().isEmpty())
|
|
|
+ ? user.getNickname() : ("用户" + userId));
|
|
|
+ newMember.setPhone(user.getPhone());
|
|
|
+ newMember.setAvatar(user.getAvatar());
|
|
|
+ newMember.setGender(user.getGender());
|
|
|
+ newMember.setGeneration(0);
|
|
|
+ newMember.setTotalPoints(0);
|
|
|
+ newMember.setSystemPoints(0);
|
|
|
+ newMember.setStatus("active");
|
|
|
+ newMember.setCreatedAt(new Date());
|
|
|
+ newMember.setUpdatedAt(new Date());
|
|
|
+ familyMemberMapper.insert(newMember);
|
|
|
+ member = newMember;
|
|
|
+ log.warn("成员记录缺失,已在目标家庭补建: userId={}, oldFamilyId={}, targetFamilyId={}, memberId={}",
|
|
|
+ userId, oldFamilyId, targetFamilyId, member.getId());
|
|
|
}
|
|
|
|
|
|
// CF 值清零丢弃(留在原家庭)
|