|
|
@@ -362,6 +362,26 @@ public class MembershipService implements MembershipServiceInterface {
|
|
|
|
|
|
// ==================== 订单与支付 ====================
|
|
|
|
|
|
+ /**
|
|
|
+ * 会员方案价格(分)。统一从 membership_levels 读取,与 /api/membership/plans 展示、后台配置同源,
|
|
|
+ * 避免历史 sys_config 价格键与会员等级表不一致导致"页面显示与下单扣款不符"。
|
|
|
+ * FAMILY 仅支持年付(调用方已把 effectivePeriod 规整为 yearly)。
|
|
|
+ */
|
|
|
+ private Integer resolveMembershipAmount(MembershipLevel level, String effectivePeriod) {
|
|
|
+ if ("monthly".equals(effectivePeriod)) {
|
|
|
+ return level.getPriceMonthly();
|
|
|
+ }
|
|
|
+ if ("quarterly".equals(effectivePeriod)) {
|
|
|
+ Integer quarterly = level.getPriceQuarterly();
|
|
|
+ if (quarterly != null && quarterly > 0) {
|
|
|
+ return quarterly;
|
|
|
+ }
|
|
|
+ Integer monthly = level.getPriceMonthly();
|
|
|
+ return monthly != null ? monthly * 3 : null;
|
|
|
+ }
|
|
|
+ return level.getPriceYearly();
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 创建订单
|
|
|
*/
|
|
|
@@ -379,44 +399,14 @@ public class MembershipService implements MembershipServiceInterface {
|
|
|
throw new RuntimeException("会员等级不存在");
|
|
|
}
|
|
|
|
|
|
- // 根据period确定费用(分)
|
|
|
- Integer amount;
|
|
|
+ // 根据period确定费用(分)— 统一从 membership_levels 读取(与前端展示/后台配置同源,避免双源不一致)
|
|
|
String effectivePeriod = period != null ? period : "yearly";
|
|
|
if ("FAMILY".equals(levelCode)) {
|
|
|
- // 家庭会员仅支持年付
|
|
|
- effectivePeriod = "yearly";
|
|
|
- String feeStr = sysConfigService.getValue("member_fee_family_yearly");
|
|
|
- if (feeStr == null) {
|
|
|
- feeStr = sysConfigService.getValue("member_fee_family");
|
|
|
- }
|
|
|
- int fee = feeStr != null ? Integer.parseInt(feeStr) : 131400;
|
|
|
- amount = fee;
|
|
|
- } else if ("PROVIDER".equals(levelCode)) {
|
|
|
- String configKey = "member_fee_standard_" + effectivePeriod;
|
|
|
- String feeStr = sysConfigService.getValue(configKey);
|
|
|
- if (feeStr == null) {
|
|
|
- feeStr = sysConfigService.getValue("member_fee_standard");
|
|
|
- }
|
|
|
- int fee = feeStr != null ? Integer.parseInt(feeStr) : 1314;
|
|
|
- amount = fee;
|
|
|
- } else if ("PREMIUM".equals(levelCode)) {
|
|
|
- // PREMIUM定价从sysConfig读取
|
|
|
- if ("monthly".equals(effectivePeriod)) {
|
|
|
- String feeStr = sysConfigService.getValue("member_fee_premium_monthly");
|
|
|
- amount = feeStr != null ? Integer.parseInt(feeStr) : 131400;
|
|
|
- } else {
|
|
|
- String feeStr = sysConfigService.getValue("member_fee_premium");
|
|
|
- amount = feeStr != null ? Integer.parseInt(feeStr) : 1316800;
|
|
|
- }
|
|
|
- } else {
|
|
|
- // 按period从会员等级表定价
|
|
|
- if ("monthly".equals(effectivePeriod)) {
|
|
|
- amount = level.getPriceMonthly();
|
|
|
- } else if ("quarterly".equals(effectivePeriod)) {
|
|
|
- amount = level.getPriceQuarterly() != null ? level.getPriceQuarterly() : level.getPriceMonthly() * 3;
|
|
|
- } else {
|
|
|
- amount = level.getPriceYearly(); // 默认yearly
|
|
|
- }
|
|
|
+ effectivePeriod = "yearly"; // 家庭会员仅支持年付
|
|
|
+ }
|
|
|
+ Integer amount = resolveMembershipAmount(level, effectivePeriod);
|
|
|
+ if (amount == null || amount <= 0) {
|
|
|
+ throw new RuntimeException("该会员方案暂未开放购买");
|
|
|
}
|
|
|
|
|
|
int originalAmount = amount;
|
|
|
@@ -542,35 +532,14 @@ public class MembershipService implements MembershipServiceInterface {
|
|
|
throw new RuntimeException("会员等级不存在");
|
|
|
}
|
|
|
|
|
|
- // 根据 period 确定费用(分)— 与 createOrder() 逻辑完全一致
|
|
|
- Integer amount;
|
|
|
+ // 根据 period 确定费用(分)— 统一从 membership_levels 读取(与前端展示/后台配置同源,避免双源不一致)
|
|
|
String effectivePeriod = period != null ? period : "yearly";
|
|
|
if ("FAMILY".equals(levelCode)) {
|
|
|
- effectivePeriod = "yearly";
|
|
|
- String feeStr = sysConfigService.getValue("member_fee_family_yearly");
|
|
|
- if (feeStr == null) { feeStr = sysConfigService.getValue("member_fee_family"); }
|
|
|
- amount = feeStr != null ? Integer.parseInt(feeStr) : 131400;
|
|
|
- } else if ("PROVIDER".equals(levelCode)) {
|
|
|
- String configKey = "member_fee_standard_" + effectivePeriod;
|
|
|
- String feeStr = sysConfigService.getValue(configKey);
|
|
|
- if (feeStr == null) { feeStr = sysConfigService.getValue("member_fee_standard"); }
|
|
|
- amount = feeStr != null ? Integer.parseInt(feeStr) : 1314;
|
|
|
- } else if ("PREMIUM".equals(levelCode)) {
|
|
|
- if ("monthly".equals(effectivePeriod)) {
|
|
|
- String feeStr = sysConfigService.getValue("member_fee_premium_monthly");
|
|
|
- amount = feeStr != null ? Integer.parseInt(feeStr) : 131400;
|
|
|
- } else {
|
|
|
- String feeStr = sysConfigService.getValue("member_fee_premium");
|
|
|
- amount = feeStr != null ? Integer.parseInt(feeStr) : 1316800;
|
|
|
- }
|
|
|
- } else {
|
|
|
- if ("monthly".equals(effectivePeriod)) {
|
|
|
- amount = level.getPriceMonthly();
|
|
|
- } else if ("quarterly".equals(effectivePeriod)) {
|
|
|
- amount = level.getPriceQuarterly() != null ? level.getPriceQuarterly() : level.getPriceMonthly() * 3;
|
|
|
- } else {
|
|
|
- amount = level.getPriceYearly();
|
|
|
- }
|
|
|
+ effectivePeriod = "yearly"; // 家庭会员仅支持年付
|
|
|
+ }
|
|
|
+ Integer amount = resolveMembershipAmount(level, effectivePeriod);
|
|
|
+ if (amount == null || amount <= 0) {
|
|
|
+ throw new RuntimeException("该会员方案暂未开放购买");
|
|
|
}
|
|
|
|
|
|
int originalAmount = amount;
|