|
|
@@ -478,42 +478,46 @@ public class CommissionService {
|
|
|
Map<String, Object> result = new HashMap<>();
|
|
|
List<Map<String, Object>> records = new ArrayList<>();
|
|
|
|
|
|
- LambdaQueryWrapper<CommissionRecord> wrapper = new LambdaQueryWrapper<CommissionRecord>()
|
|
|
- .eq(CommissionRecord::getReferrerId, userId);
|
|
|
-
|
|
|
- if ("L1".equals(level)) {
|
|
|
- wrapper.eq(CommissionRecord::getLevel, 1);
|
|
|
- } else if ("L2".equals(level)) {
|
|
|
- wrapper.eq(CommissionRecord::getLevel, 2);
|
|
|
+ // 成员来源:users.referrer_id(与 getTeamStats/getTotalTeamSize 口径一致)
|
|
|
+ // 以前用 commission_records,只包含消费过的成员;现在用 users.referrer_id 包含全部推荐关系
|
|
|
+ List<User> memberUsers = new ArrayList<>();
|
|
|
+ if ("L2".equals(level)) {
|
|
|
+ // L2:先查 L1(直接推荐人),再查 L2(L1 成员的推荐人)
|
|
|
+ List<User> l1Users = userMapper.selectList(
|
|
|
+ new LambdaQueryWrapper<User>().eq(User::getReferrerId, userId));
|
|
|
+ List<Long> l1Ids = new ArrayList<>();
|
|
|
+ for (User u : l1Users) {
|
|
|
+ if (u.getId() != null) {
|
|
|
+ l1Ids.add(u.getId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!l1Ids.isEmpty()) {
|
|
|
+ memberUsers = userMapper.selectList(
|
|
|
+ new LambdaQueryWrapper<User>().in(User::getReferrerId, l1Ids));
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // L1 或 ALL:直接推荐人
|
|
|
+ memberUsers = userMapper.selectList(
|
|
|
+ new LambdaQueryWrapper<User>().eq(User::getReferrerId, userId));
|
|
|
}
|
|
|
|
|
|
- SortUtil.applySort(wrapper);
|
|
|
- List<CommissionRecord> allRecords = commissionRecordMapper.selectList(wrapper);
|
|
|
-
|
|
|
+ // 组装成员基础信息
|
|
|
Map<Long, Map<String, Object>> memberMap = new LinkedHashMap<>();
|
|
|
- for (CommissionRecord record : allRecords) {
|
|
|
- Long buyerId = record.getBuyerId();
|
|
|
- if (buyerId == null) continue;
|
|
|
-
|
|
|
- if (!memberMap.containsKey(buyerId)) {
|
|
|
- User member = userMapper.selectById(buyerId);
|
|
|
- if (member == null) continue;
|
|
|
-
|
|
|
- Map<String, Object> memberInfo = new HashMap<>();
|
|
|
- memberInfo.put("userId", buyerId);
|
|
|
- memberInfo.put("nickname", member.getNickname() != null ? member.getNickname() : "微信用户");
|
|
|
- memberInfo.put("avatarUrl", member.getAvatar() != null ? member.getAvatar() : "");
|
|
|
- memberInfo.put("createdAt", member.getCreatedAt());
|
|
|
- memberInfo.put("orderCount", 0);
|
|
|
- memberInfo.put("commissionEarned", 0);
|
|
|
- memberMap.put(buyerId, memberInfo);
|
|
|
- }
|
|
|
+ for (User member : memberUsers) {
|
|
|
+ if (member.getId() == null) continue;
|
|
|
+ Map<String, Object> memberInfo = new HashMap<>();
|
|
|
+ memberInfo.put("userId", member.getId());
|
|
|
+ memberInfo.put("nickname", member.getNickname() != null ? member.getNickname() : "微信用户");
|
|
|
+ memberInfo.put("avatarUrl", member.getAvatar() != null ? member.getAvatar() : "");
|
|
|
+ memberInfo.put("createdAt", member.getCreatedAt());
|
|
|
+ memberInfo.put("orderCount", 0);
|
|
|
+ memberInfo.put("commissionEarned", 0);
|
|
|
+ memberMap.put(member.getId(), memberInfo);
|
|
|
}
|
|
|
|
|
|
- // 批量预取成员汇总(避免 N+1):已完成履约订单总额 + 非cancelled佣金总额,循环内直接取用
|
|
|
+ // 批量预取消费订单总额(已履约)
|
|
|
List<Long> buyerIds = new ArrayList<>(memberMap.keySet());
|
|
|
Map<Long, Integer> consumptionMap = new HashMap<>();
|
|
|
- Map<Long, Integer> cfEarnedMap = new HashMap<>();
|
|
|
if (!buyerIds.isEmpty()) {
|
|
|
LambdaQueryWrapper<ProductOrder> consumptionWrapper = new LambdaQueryWrapper<ProductOrder>()
|
|
|
.in(ProductOrder::getBuyerId, buyerIds)
|
|
|
@@ -522,7 +526,11 @@ public class CommissionService {
|
|
|
if (order.getBuyerId() == null || order.getTotalAmount() == null) continue;
|
|
|
consumptionMap.merge(order.getBuyerId(), order.getTotalAmount(), Integer::sum);
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
+ // 批量预取佣金总额(非 cancel 的)
|
|
|
+ Map<Long, Integer> cfEarnedMap = new HashMap<>();
|
|
|
+ if (!buyerIds.isEmpty()) {
|
|
|
LambdaQueryWrapper<CommissionRecord> cfWrapper = new LambdaQueryWrapper<CommissionRecord>()
|
|
|
.eq(CommissionRecord::getReferrerId, userId)
|
|
|
.in(CommissionRecord::getBuyerId, buyerIds)
|
|
|
@@ -533,10 +541,12 @@ public class CommissionService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // 为每位成员补充层级过滤后的订单数和佣金总额
|
|
|
for (Map.Entry<Long, Map<String, Object>> entry : memberMap.entrySet()) {
|
|
|
Long buyerId = entry.getKey();
|
|
|
Map<String, Object> memberInfo = entry.getValue();
|
|
|
|
|
|
+ // 订单数(按层级过滤 commission_records)
|
|
|
LambdaQueryWrapper<CommissionRecord> orderWrapper = new LambdaQueryWrapper<CommissionRecord>()
|
|
|
.eq(CommissionRecord::getReferrerId, userId)
|
|
|
.eq(CommissionRecord::getBuyerId, buyerId);
|
|
|
@@ -545,13 +555,14 @@ public class CommissionService {
|
|
|
} else if ("L2".equals(level)) {
|
|
|
orderWrapper.eq(CommissionRecord::getLevel, 2);
|
|
|
}
|
|
|
- SortUtil.applySort(orderWrapper);
|
|
|
Long orderCount = commissionRecordMapper.selectCount(orderWrapper);
|
|
|
memberInfo.put("orderCount", orderCount != null ? orderCount.intValue() : 0);
|
|
|
|
|
|
+ // 佣金总额(按层级过滤)
|
|
|
LambdaQueryWrapper<CommissionRecord> commissionWrapper = new LambdaQueryWrapper<CommissionRecord>()
|
|
|
.eq(CommissionRecord::getReferrerId, userId)
|
|
|
- .eq(CommissionRecord::getBuyerId, buyerId);
|
|
|
+ .eq(CommissionRecord::getBuyerId, buyerId)
|
|
|
+ .ne(CommissionRecord::getStatus, "cancelled");
|
|
|
if ("L1".equals(level)) {
|
|
|
commissionWrapper.eq(CommissionRecord::getLevel, 1);
|
|
|
} else if ("L2".equals(level)) {
|