Explorar el Código

feat(backend+frontend): 推荐人支持按家庭成员维度查询,切换视角时显示当前成员的推荐人

iwt hace 1 mes
padre
commit
cdda39ad29

+ 5 - 2
cfc-backend/src/main/java/com/etotem/cfc/controller/CommissionController.java

@@ -100,8 +100,11 @@ public class CommissionController {
      * 获取我的推荐人
      */
     @PostMapping("/my-referrer")
-    public Result<Map<String, Object>> myReferrer(@RequestAttribute("userId") Long userId) {
-        return Result.success(commissionService.getMyReferrer(userId));
+    public Result<Map<String, Object>> myReferrer(@RequestAttribute("userId") Long userId,
+                                                   @RequestBody(required = false) Map<String, Object> params) {
+        Long memberId = params != null && params.get("memberId") != null
+                ? ((Number) params.get("memberId")).longValue() : null;
+        return Result.success(commissionService.getMyReferrer(userId, memberId));
     }
 
     /**

+ 20 - 3
cfc-backend/src/main/java/com/etotem/cfc/service/CommissionService.java

@@ -12,6 +12,8 @@ import com.etotem.cfc.entity.PromotionTierConfig;
 import com.etotem.cfc.entity.ReferralTree;
 import com.etotem.cfc.entity.User;
 import com.etotem.cfc.entity.WithdrawalRequest;
+import com.etotem.cfc.entity.FamilyMember;
+import com.etotem.cfc.mapper.FamilyMemberMapper;
 import com.etotem.cfc.mapper.CommissionRecordMapper;
 import com.etotem.cfc.mapper.ProductMapper;
 import com.etotem.cfc.mapper.ProductOrderMapper;
@@ -43,6 +45,9 @@ public class CommissionService {
     @Resource
     private UserMapper userMapper;
 
+    @Resource
+    private FamilyMemberMapper familyMemberMapper;
+
     @Resource
     private ProductMapper productMapper;
     
@@ -699,9 +704,21 @@ public class CommissionService {
     }
 
     /**
-     * 获取我的推荐人信息(直推人)
+     * 获取我的推荐人信息(直推人),支持按家庭成员维度查询
+     * memberId 不为空时按成员查其关联用户的推荐人;为空时直接用 userId
      */
-    public Map<String, Object> getMyReferrer(Long userId) {
+    public Map<String, Object> getMyReferrer(Long userId, Long memberId) {
+        Long effectiveUserId = userId;
+        if (memberId != null && memberId > 0) {
+            FamilyMember member = familyMemberMapper.selectById(memberId);
+            if (member != null && member.getUserId() != null) {
+                effectiveUserId = member.getUserId();
+            }
+        }
+        return doGetMyReferrer(effectiveUserId);
+    }
+
+    private Map<String, Object> doGetMyReferrer(Long userId) {
         Map<String, Object> result = new LinkedHashMap<>();
         User user = userMapper.selectById(userId);
         if (user == null || user.getReferrerId() == null) {
@@ -718,7 +735,7 @@ public class CommissionService {
         result.put("nickname", referrer.getNickname());
         result.put("avatar", referrer.getAvatar());
         result.put("referralCode", referrer.getReferralCode());
-        result.put("bindTime", user.getCreatedAt()); // 以用户创建时间作为绑定时间近似
+        result.put("bindTime", user.getCreatedAt());
         return result;
     }
 

+ 2 - 1
cfc-frontend/pages/profile-main/profile.vue

@@ -458,7 +458,8 @@ export default {
     },
     async loadMyReferrer() {
       try {
-        var res = await getMyReferrer()
+        var memberId = uni.getStorageSync('currentMemberId') || uni.getStorageSync('currentChildId') || 0
+        var res = await getMyReferrer(memberId)
         if (res && res.code === 200 && res.data && res.data.hasReferrer) {
           this.myReferrer = res.data
         }

+ 1 - 1
cfc-frontend/utils/api.js

@@ -1933,7 +1933,7 @@ export const getCommissionBalance = () => {
 
 export const getTeamConsumption = (maxLevel = 3) => request('/api/commission/team/consumption', 'POST', { maxLevel })
 
-export const getMyReferrer = () => request('/api/commission/my-referrer', 'POST')
+export const getMyReferrer = (memberId) => request('/api/commission/my-referrer', 'POST', memberId ? { memberId } : {})
 
 export const getTeamTree = (maxLevel = 3) => request('/api/commission/team/tree', 'POST', { maxLevel })