Prechádzať zdrojové kódy

chore: auto bump version and changelog [skip ci]

iwt 1 týždeň pred
rodič
commit
99f59fe10d

+ 6 - 0
cfc-backend/src/main/java/com/etotem/cfc/controller/MembershipController.java

@@ -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);

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

@@ -465,6 +465,9 @@ public class FamilyMemberService {
         }
 
         logMemberAction(oldFamilyId, memberId, "kick", member.getNickname(), null, userId);
+
+        // 方案B:成员被踢出后,重新核算原家庭会员身份
+        membershipService.reconcileFamilyMembership(oldFamilyId);
     }
 
     /**

+ 11 - 0
cfc-backend/src/main/java/com/etotem/cfc/service/MembershipService.java

@@ -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:重新核算家庭会员身份(成员离开/切换家庭/回收时调用)
      * - 家庭有有效会员 → 同步给所有成员

+ 9 - 0
cfc-backend/src/main/java/com/etotem/cfc/service/api/MembershipServiceInterface.java

@@ -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
cfc-web/.last_build_commit

@@ -1 +1 @@
-f54f7b5767d3e6edb21318a88379ff7e20022bac
+57665906153077df771dbae3c39901d9513fb87a

+ 2 - 2
cfc-web/package-lock.json

@@ -1,12 +1,12 @@
 {
   "name": "cfc-web",
-  "version": "1.0.1359",
+  "version": "1.0.1355",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
       "name": "cfc-web",
-      "version": "1.0.1359",
+      "version": "1.0.1355",
       "dependencies": {
         "@wangeditor/editor": "^5.1.23",
         "@wangeditor/editor-for-vue": "^1.0.2",

+ 1 - 1
cfc-web/package.json

@@ -1,6 +1,6 @@
 {
   "name": "cfc-web",
-  "version": "1.0.1355",
+  "version": "1.0.1356",
   "private": true,
   "scripts": {
     "dev": "vue-cli-service serve",