@@ -88,6 +88,12 @@ public class MembershipController {
result.put("memberLevel", memberLevel);
result.put("memberExpireTime", user.getMemberExpireTime());
+ // 方案B:显式返回家庭有效等级(全家共享,按家庭维度判定)
+ if (familyId != null) {
+ String familyLevel = membershipService.getFamilyEffectiveLevel(familyId);
+ result.put("familyEffectiveLevel", familyLevel);
+ }
+
// 家庭会员记录
if (familyId != null) {
FamilyMembershipDTO membership = membershipService.getFamilyMembership(familyId);
@@ -465,6 +465,9 @@ public class FamilyMemberService {
}
logMemberAction(oldFamilyId, memberId, "kick", member.getNickname(), null, userId);
+ // 方案B:成员被踢出后,重新核算原家庭会员身份
+ membershipService.reconcileFamilyMembership(oldFamilyId);
/**
@@ -978,6 +978,17 @@ public class MembershipService implements MembershipServiceInterface {
log.info("新成员继承家庭会员: userId={}, familyId={}, level={}", userId, familyId, active.getLevelCode());
+ /**
+ * 获取家庭有效会员等级(按家庭维度判定,不依赖任何特定用户)
+ * @return 等级代码(FAMILY/PREMIUM/LIFETIME/FREE),无有效会员返回 FREE
+ */
+ public String getFamilyEffectiveLevel(Long familyId) {
+ if (familyId == null) return "FREE";
+ FamilyMembership active = getActiveFamilyMembership(familyId);
+ if (active != null) return active.getLevelCode();
+ return "FREE";
* 方案B:重新核算家庭会员身份(成员离开/切换家庭/回收时调用)
* - 家庭有有效会员 → 同步给所有成员
@@ -36,4 +36,13 @@ public interface MembershipServiceInterface {
*/
boolean grantMembershipByGift(Long familyId, Long userId, String levelCode,
String sourceOrderNo, String transactionId);
+ /** 新成员加入家庭时继承家庭有效会员身份 */
+ void syncMembershipForNewMember(Long userId, Long familyId);
+ /** 重新核算家庭会员身份(成员离开/切换家庭/回收时调用) */
+ void reconcileFamilyMembership(Long familyId);
+ /** 获取家庭有效会员等级(按家庭维度判定) */
+ String getFamilyEffectiveLevel(Long familyId);
@@ -1 +1 @@
-f54f7b5767d3e6edb21318a88379ff7e20022bac
+57665906153077df771dbae3c39901d9513fb87a
@@ -1,12 +1,12 @@
{
"name": "cfc-web",
- "version": "1.0.1359",
+ "version": "1.0.1355",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"dependencies": {
"@wangeditor/editor": "^5.1.23",
"@wangeditor/editor-for-vue": "^1.0.2",
@@ -1,6 +1,6 @@
- "version": "1.0.1355",
+ "version": "1.0.1356",
"private": true,
"scripts": {
"dev": "vue-cli-service serve",