|
@@ -514,6 +514,80 @@ public class MembershipService implements MembershipServiceInterface {
|
|
|
return originalPrice;
|
|
return originalPrice;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 商品赠送会员:赠送对象=家庭创建者;已有同级/更高级有效会员则跳过。
|
|
|
|
|
+ * 有效期=365天;写入 family_memberships + 升级记录(upgrade_type='gift');跳过佣金。
|
|
|
|
|
+ */
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public boolean grantMembershipByGift(Long familyId, Long userId, String levelCode,
|
|
|
|
|
+ String sourceOrderNo, String transactionId) {
|
|
|
|
|
+ if (familyId == null || userId == null || levelCode == null || levelCode.isEmpty()) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ // 等级编码校验:需存在于 membership_levels 且非 FREE
|
|
|
|
|
+ MembershipLevel giftLevel = levelMapper.selectOne(new LambdaQueryWrapper<MembershipLevel>()
|
|
|
|
|
+ .eq(MembershipLevel::getLevelCode, levelCode));
|
|
|
|
|
+ if (giftLevel == null || "FREE".equals(giftLevel.getLevelCode())) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ // 目标用户=家庭创建者
|
|
|
|
|
+ Family family = familyMapper.selectById(familyId);
|
|
|
|
|
+ if (family == null || family.getCreatorId() == null) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ Long adminUserId = family.getCreatorId();
|
|
|
|
|
+ // 防御:购买者必须属于该家庭(赠送仅对家庭创建者生效)
|
|
|
|
|
+ User buyer = userMapper.selectById(userId);
|
|
|
|
|
+ if (buyer == null || !familyId.equals(buyer.getFamilyId())) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ User adminUser = userMapper.selectById(adminUserId);
|
|
|
|
|
+ if (adminUser == null) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+ // 前置校验:当前有效等级低于赠送等级才送(无会员/过期=FREE 视为最低)
|
|
|
|
|
+ String currentLevel = getMemberLevel(adminUserId);
|
|
|
|
|
+ Long currentLevelId = null;
|
|
|
|
|
+ if (currentLevel != null && !"FREE".equals(currentLevel)) {
|
|
|
|
|
+ MembershipLevel current = levelMapper.selectOne(new LambdaQueryWrapper<MembershipLevel>()
|
|
|
|
|
+ .eq(MembershipLevel::getLevelCode, currentLevel));
|
|
|
|
|
+ currentLevelId = current != null ? current.getId() : null;
|
|
|
|
|
+ }
|
|
|
|
|
+ if (currentLevelId != null && currentLevelId >= giftLevel.getId()) {
|
|
|
|
|
+ return false; // 已有同级或更高级有效会员,跳过
|
|
|
|
|
+ }
|
|
|
|
|
+ // 有效期:按级别年费周期(默认365天)
|
|
|
|
|
+ Date expireTime = new Date(System.currentTimeMillis() + 365L * 24 * 60 * 60 * 1000);
|
|
|
|
|
+ // 写订阅记录
|
|
|
|
|
+ FamilyMembership membership = new FamilyMembership();
|
|
|
|
|
+ membership.setFamilyId(familyId);
|
|
|
|
|
+ membership.setLevelCode(levelCode);
|
|
|
|
|
+ membership.setStartDate(new Date());
|
|
|
|
|
+ membership.setEndDate(expireTime);
|
|
|
|
|
+ membership.setPaymentMethod("gift");
|
|
|
|
|
+ membership.setPaymentStatus("paid");
|
|
|
|
|
+ membership.setOrderNo(sourceOrderNo);
|
|
|
|
|
+ membership.setTransactionId(transactionId);
|
|
|
|
|
+ membership.setAmount(0);
|
|
|
|
|
+ membershipMapper.insert(membership);
|
|
|
|
|
+ // 升级用户
|
|
|
|
|
+ String fromLevel = adminUser.getMemberLevel() != null ? adminUser.getMemberLevel() : "FREE";
|
|
|
|
|
+ adminUser.setMemberLevel(levelCode);
|
|
|
|
|
+ adminUser.setMemberExpireTime(expireTime);
|
|
|
|
|
+ adminUser.setUpdatedAt(new Date());
|
|
|
|
|
+ userMapper.updateById(adminUser);
|
|
|
|
|
+ // 升级记录(upgradeType='gift')
|
|
|
|
|
+ MemberUpgradeRecord record = new MemberUpgradeRecord();
|
|
|
|
|
+ record.setUserId(adminUserId);
|
|
|
|
|
+ record.setFromLevel(fromLevel);
|
|
|
|
|
+ record.setToLevel(levelCode);
|
|
|
|
|
+ record.setUpgradeType("gift");
|
|
|
|
|
+ record.setExpireTime(expireTime);
|
|
|
|
|
+ record.setCreatedAt(new Date());
|
|
|
|
|
+ memberUpgradeRecordMapper.insert(record);
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// ==================== 定时任务支持 ====================
|
|
// ==================== 定时任务支持 ====================
|
|
|
|
|
|
|
|
/**
|
|
/**
|