|
|
@@ -196,7 +196,8 @@ public class MembershipController {
|
|
|
return Result.error("用户不存在");
|
|
|
}
|
|
|
|
|
|
- Long familyId = membershipService.getUserFamilyId(userId);
|
|
|
+ // S-cfc-232 family.family.autoCreateForPurchase: 无家庭新用户购买时自动创建初始家庭
|
|
|
+ Long familyId = membershipService.getOrCreateUserFamilyId(userId);
|
|
|
String levelCode = params.getOrDefault("levelCode", "FAMILY").toString();
|
|
|
String paymentType = params.getOrDefault("paymentType", "yearly").toString();
|
|
|
String period = params.getOrDefault("period", "yearly").toString();
|
|
|
@@ -221,7 +222,8 @@ public class MembershipController {
|
|
|
return Result.error("用户不存在");
|
|
|
}
|
|
|
|
|
|
- Long familyId = membershipService.getUserFamilyId(userId);
|
|
|
+ // S-cfc-232 family.family.autoCreateForPurchase: 无家庭新用户激活试用时自动创建初始家庭
|
|
|
+ Long familyId = membershipService.getOrCreateUserFamilyId(userId);
|
|
|
PaymentOrderDTO order = membershipService.createOrder(userId, familyId, "FAMILY", "trial", null, null);
|
|
|
return Result.success(order);
|
|
|
}
|
|
|
@@ -242,7 +244,8 @@ public class MembershipController {
|
|
|
return Result.error("用户不存在");
|
|
|
}
|
|
|
|
|
|
- Long familyId = membershipService.getUserFamilyId(userId);
|
|
|
+ // S-cfc-232 family.family.autoCreateForPurchase: 无家庭新用户下单时自动创建初始家庭
|
|
|
+ Long familyId = membershipService.getOrCreateUserFamilyId(userId);
|
|
|
String levelCode = params.get("levelCode").toString();
|
|
|
String paymentType = params.get("paymentType").toString();
|
|
|
String period = params.get("period") != null ? params.get("period").toString() : "yearly";
|
|
|
@@ -280,7 +283,9 @@ public class MembershipController {
|
|
|
|
|
|
/**
|
|
|
* 购买会员档位(SC-P-58 一段式购买入口:选档位 → 待支付订单 + 支付参数)。
|
|
|
- * 无家庭时 fail-fast 拒绝(与 createOrder 同源文案),家庭维度重复购买幂等在
|
|
|
+ * 无家庭新用户购买时自动创建初始家庭(family.family.autoCreateForPurchase;
|
|
|
+ * 与 /upgrade|/trial|/orders 同语义);get-or-create 仍无法获得家庭时
|
|
|
+ * noFamily 守卫兜底拒绝。家庭维度重复购买幂等在
|
|
|
* {@code MembershipService#createOrder} 落单前守卫。
|
|
|
*/
|
|
|
@Operation(summary = "购买会员档位")
|
|
|
@@ -295,7 +300,11 @@ public class MembershipController {
|
|
|
if (user == null) {
|
|
|
return Result.error("用户不存在");
|
|
|
}
|
|
|
- if (user.getFamilyId() == null) {
|
|
|
+
|
|
|
+ // S-cfc-232 family.family.autoCreateForPurchase: 无家庭新用户自动创建初始家庭后继续购买;
|
|
|
+ // 兜底:get-or-create 仍无法获得家庭时才 noFamily(5001) 守卫拒绝
|
|
|
+ Long familyId = membershipService.getOrCreateUserFamilyId(userId);
|
|
|
+ if (familyId == null) {
|
|
|
return Result.noFamily("请先创建或加入家庭后再购买会员");
|
|
|
}
|
|
|
|
|
|
@@ -307,7 +316,7 @@ public class MembershipController {
|
|
|
Long couponId = ParamUtils.getLong(params.get("couponId"));
|
|
|
|
|
|
Map<String, Object> result = membershipService.purchasePlan(
|
|
|
- userId, user.getFamilyId(), levelCode, period, couponId);
|
|
|
+ userId, familyId, levelCode, period, couponId);
|
|
|
if (result == null) {
|
|
|
return Result.error(46001, "该商品暂未开放购买");
|
|
|
}
|