|
|
@@ -4,13 +4,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
|
|
import com.etotem.cfc.dto.FamilyStatusDTO;
|
|
|
import com.etotem.cfc.dto.InviteValidateDTO;
|
|
|
-import com.etotem.cfc.entity.FamilyMember;
|
|
|
-import com.etotem.cfc.entity.FamilyMembership;
|
|
|
import com.etotem.cfc.entity.Family;
|
|
|
import com.etotem.cfc.entity.FamilyInvitation;
|
|
|
import com.etotem.cfc.entity.User;
|
|
|
-import com.etotem.cfc.mapper.FamilyMemberMapper;
|
|
|
-import com.etotem.cfc.mapper.FamilyMembershipMapper;
|
|
|
import com.etotem.cfc.mapper.FamilyInvitationMapper;
|
|
|
import com.etotem.cfc.mapper.FamilyMapper;
|
|
|
import com.etotem.cfc.mapper.UserMapper;
|
|
|
@@ -34,10 +30,7 @@ public class FamilyInvitationService {
|
|
|
private UserMapper userMapper;
|
|
|
|
|
|
@Resource
|
|
|
- private FamilyMemberMapper familyMemberMapper;
|
|
|
-
|
|
|
- @Resource
|
|
|
- private FamilyMembershipMapper familyMembershipMapper;
|
|
|
+ private FamilyMemberService familyMemberService;
|
|
|
|
|
|
public InviteValidateDTO validateInvitation(String token) {
|
|
|
FamilyInvitation invitation = familyInvitationMapper.selectOne(
|
|
|
@@ -161,7 +154,8 @@ public class FamilyInvitationService {
|
|
|
if (mergeFamily == null || !mergeFamily) {
|
|
|
throw new RuntimeException("您已加入其他家庭,如需加入请选择合并家庭");
|
|
|
}
|
|
|
- mergeIntoFamily(userId, invitation.getFamilyId());
|
|
|
+ // 切换家庭:迁移该成员资产到新家庭,CF 清零留在原家庭
|
|
|
+ familyMemberService.switchMemberToFamily(userId, invitation.getFamilyId());
|
|
|
}
|
|
|
|
|
|
user.setFamilyId(invitation.getFamilyId());
|
|
|
@@ -181,54 +175,16 @@ public class FamilyInvitationService {
|
|
|
return "加入家庭成功";
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 切换家庭(兼容旧调用方:UserService.joinFamily / FamilyJoinRequestService.approveJoinRequest)
|
|
|
+ * 语义已从"合并整个家庭"改为"切换单个成员":
|
|
|
+ * - 只迁移该用户自己的 family_members 记录与资产到目标家庭
|
|
|
+ * - 不搬走旧家庭其他成员
|
|
|
+ * - 不迁移 family_memberships(付费等级留在原家庭)
|
|
|
+ * - CF 值清零留在原家庭
|
|
|
+ */
|
|
|
public void mergeIntoFamily(Long userId, Long targetFamilyId) {
|
|
|
- User user = userMapper.selectById(userId);
|
|
|
- if (user == null) {
|
|
|
- throw new RuntimeException("用户不存在");
|
|
|
- }
|
|
|
- Long oldFamilyId = user.getFamilyId();
|
|
|
- if (oldFamilyId == null || oldFamilyId == 0L) {
|
|
|
- throw new RuntimeException("用户尚未加入任何家庭");
|
|
|
- }
|
|
|
-
|
|
|
- user.setFamilyId(targetFamilyId);
|
|
|
- user.setUpdatedAt(new Date());
|
|
|
- userMapper.updateById(user);
|
|
|
-
|
|
|
- List<FamilyMember> children = familyMemberMapper.selectList(
|
|
|
- new LambdaQueryWrapper<FamilyMember>()
|
|
|
- .eq(FamilyMember::getFamilyId, oldFamilyId)
|
|
|
- );
|
|
|
- for (FamilyMember child : children) {
|
|
|
- child.setFamilyId(targetFamilyId);
|
|
|
- child.setUpdatedAt(new Date());
|
|
|
- familyMemberMapper.updateById(child);
|
|
|
- }
|
|
|
-
|
|
|
- // 迁移家庭会员记录(付费等级等)
|
|
|
- List<FamilyMembership> memberships = familyMembershipMapper.selectList(
|
|
|
- new LambdaQueryWrapper<FamilyMembership>()
|
|
|
- .eq(FamilyMembership::getFamilyId, oldFamilyId)
|
|
|
- );
|
|
|
- for (FamilyMembership ms : memberships) {
|
|
|
- ms.setFamilyId(targetFamilyId);
|
|
|
- familyMembershipMapper.updateById(ms);
|
|
|
- }
|
|
|
-
|
|
|
- // 只有在确实迁移到不同家庭时才检查并清理旧家庭
|
|
|
- if (!oldFamilyId.equals(targetFamilyId)) {
|
|
|
- Long memberCount = userMapper.selectCount(
|
|
|
- new LambdaQueryWrapper<User>()
|
|
|
- .eq(User::getFamilyId, oldFamilyId)
|
|
|
- );
|
|
|
- Long fmCount = familyMemberMapper.selectCount(
|
|
|
- new LambdaQueryWrapper<FamilyMember>()
|
|
|
- .eq(FamilyMember::getFamilyId, oldFamilyId)
|
|
|
- );
|
|
|
- if (memberCount == 0 && fmCount == 0) {
|
|
|
- familyMapper.deleteById(oldFamilyId);
|
|
|
- }
|
|
|
- }
|
|
|
+ familyMemberService.switchMemberToFamily(userId, targetFamilyId);
|
|
|
}
|
|
|
|
|
|
public FamilyStatusDTO checkUserFamilyStatus(Long userId) {
|