|
|
@@ -104,12 +104,13 @@ public class OrderService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * US-6.4: C端佣金结算 — 按比例分成
|
|
|
+/**
|
|
|
+ * US-6.4: C 端佣金结算 — 按比例分成
|
|
|
+ * 推荐人无需付费,免费用户与付费用户享受相同分佣比例(40%)。
|
|
|
*/
|
|
|
private void handleAnnualCommission(Order order, User buyer, User inviter) {
|
|
|
- // AC 5-7: 收款人必须已付费 (referralCode != null)
|
|
|
- if (inviter.getReferralCode() == null) return;
|
|
|
+ // 移除付费检查:免费用户也可以获得佣金
|
|
|
+ // if (inviter.getReferralCode() == null) return; // REMOVED
|
|
|
|
|
|
int directRate = configService.getInt("commission.annual.direct_rate", 4000); // 万分比
|
|
|
int upstreamRate = configService.getInt("commission.annual.upstream_rate", 500);
|
|
|
@@ -117,24 +118,25 @@ public class OrderService {
|
|
|
int l1Amount = order.getTotalFee() * directRate / 10000;
|
|
|
int l2Amount = order.getTotalFee() * upstreamRate / 10000;
|
|
|
|
|
|
- String l1Remark = String.format("C端年费直接推荐佣金 (%d%%)", directRate / 100);
|
|
|
- createCommission(order.getId(), buyer.getId(), inviter.getId(), 1, l1Amount, l1Remark);
|
|
|
+ String l1Remark = String.format("C 端年费直接推荐佣金 (%d%%)", directRate / 100);
|
|
|
+createCommission(order.getId(), buyer.getId(), inviter.getId(), 1, l1Amount, l1Remark);
|
|
|
|
|
|
if (inviter.getInvitedBy() != null && l2Amount > 0) {
|
|
|
User inviter2 = userRepository.findById(inviter.getInvitedBy()).orElse(null);
|
|
|
- if (inviter2 != null && inviter2.getReferralCode() != null) {
|
|
|
- String l2Remark = String.format("C端年费上级佣金 (%d%%)", upstreamRate / 100);
|
|
|
+ if (inviter2 != null && l2Amount > 0) {
|
|
|
+ String l2Remark = String.format("C 端年费上级佣金 (%d%%)", upstreamRate / 100);
|
|
|
createCommission(order.getId(), buyer.getId(), inviter2.getId(), 2, l2Amount, l2Remark);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 超级会员佣金结算 — 按比例分成 (同C端年费模式)
|
|
|
+ * 超级会员佣金结算 — 按比例分成 (同 C 端年费模式)
|
|
|
+ * 推荐人无需付费,免费用户与付费用户享受相同分佣比例。
|
|
|
*/
|
|
|
private void handleSuperMemberCommission(Order order, User buyer, User inviter) {
|
|
|
- // 收款人必须已付费 (referralCode != null)
|
|
|
- if (inviter.getReferralCode() == null) return;
|
|
|
+ // 移除付费检查:免费用户也可以获得佣金
|
|
|
+ // if (inviter.getReferralCode() == null) return; // REMOVED
|
|
|
|
|
|
int directRate = configService.getInt("commission.super_member.direct_rate", 3000); // 万分比
|
|
|
int upstreamRate = configService.getInt("commission.super_member.upstream_rate", 500);
|
|
|
@@ -147,7 +149,7 @@ public class OrderService {
|
|
|
|
|
|
if (inviter.getInvitedBy() != null && l2Amount > 0) {
|
|
|
User inviter2 = userRepository.findById(inviter.getInvitedBy()).orElse(null);
|
|
|
- if (inviter2 != null && inviter2.getReferralCode() != null) {
|
|
|
+ if (inviter2 != null && l2Amount > 0) {
|
|
|
String l2Remark = String.format("超级会员上级佣金 (%d%%)", upstreamRate / 100);
|
|
|
createCommission(order.getId(), buyer.getId(), inviter2.getId(), 2, l2Amount, l2Remark);
|
|
|
}
|
|
|
@@ -155,12 +157,14 @@ public class OrderService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * US-6.3: B端佣金结算 — 固定金额 + 身份半额 + 升级补差
|
|
|
+ * US-6.3: B 端佣金结算 — 固定金额 + 身份半额 + 升级补差
|
|
|
*/
|
|
|
private void handlePractitionerCommission(Order order, User buyer, User inviter) {
|
|
|
// 判断推荐人身份 (US-6.3 §3-4)
|
|
|
+ // 免费用户也可以获得佣金,但能量师推荐仍按固定金额,C 端推荐按半额
|
|
|
String inviterVipType = inviter.getVipType();
|
|
|
- if (inviterVipType == null) return; // 推荐人未付费 → 跳过
|
|
|
+ // 移除免费用户检查:免费用户推荐能量师时,按 C 端半额处理
|
|
|
+ // if (inviterVipType == null) return; // REMOVED - 改为按免费用户处理
|
|
|
|
|
|
int l1Default, l1Amount, l2Amount;
|
|
|
String l1Remark;
|
|
|
@@ -168,12 +172,10 @@ public class OrderService {
|
|
|
if ("practitioner".equals(inviterVipType)) {
|
|
|
l1Default = configService.getInt("commission.practitioner.l1", 50000);
|
|
|
l1Remark = "直接推荐升级能量师 (L1)";
|
|
|
- } else if ("annual".equals(inviterVipType)) {
|
|
|
- // AC 4: C端推荐 → 半额
|
|
|
- l1Default = configService.getInt("commission.practitioner.l1_cend", 20000);
|
|
|
- l1Remark = "直接推荐升级能量师 (C端半额)";
|
|
|
} else {
|
|
|
- return;
|
|
|
+ // 免费用户或 C 端会员 → 半额
|
|
|
+ l1Default = configService.getInt("commission.practitioner.l1_cend", 20000);
|
|
|
+ l1Remark = "直接推荐升级能量师 (免费/C 端半额)";
|
|
|
}
|
|
|
l1Amount = l1Default;
|
|
|
l2Amount = configService.getInt("commission.practitioner.l2", 10000);
|