feat(invite): 支持租户与用户两种邀请码类型

This commit is contained in:
2025-12-29 15:04:30 +08:00
parent 778cf4a0cb
commit be921e144f
3 changed files with 35 additions and 4 deletions

View File

@@ -75,4 +75,18 @@ public class KeyboardUserInviteCodes {
@TableField(value = "used_count") @TableField(value = "used_count")
@Schema(description="邀请码已使用次数") @Schema(description="邀请码已使用次数")
private Integer usedCount; private Integer usedCount;
/**
* 邀请码类型USER=普通用户邀请码TENANT=租户邀请码
*/
@TableField(value = "invite_type")
@Schema(description="邀请码类型USER=普通用户邀请码TENANT=租户邀请码")
private String inviteType;
/**
* 邀请码所属租户ID当inviteType=TENANT时使用
*/
@TableField(value = "tenant_id")
@Schema(description="邀请码所属租户ID当inviteType=TENANT时使用")
private Long tenantId;
} }

View File

@@ -77,6 +77,7 @@ public class KeyboardUserInviteCodesServiceImpl extends ServiceImpl<KeyboardUser
inviteCode.setExpiresAt(null); // 永久有效 inviteCode.setExpiresAt(null); // 永久有效
inviteCode.setMaxUses(null); // 不限次数 inviteCode.setMaxUses(null); // 不限次数
inviteCode.setUsedCount(0); // 初始使用次数为0 inviteCode.setUsedCount(0); // 初始使用次数为0
inviteCode.setInviteType("USER"); // 默认为普通用户邀请码
// 保存到数据库 // 保存到数据库
this.save(inviteCode); this.save(inviteCode);

View File

@@ -270,14 +270,22 @@ public class UserServiceImpl extends ServiceImpl<KeyboardUserMapper, KeyboardUse
userInvite.setBoundAt(new Date()); userInvite.setBoundAt(new Date());
userInvite.setBindIp(request.getRemoteAddr()); userInvite.setBindIp(request.getRemoteAddr());
userInvite.setBindUserAgent(request.getHeader("User-Agent")); userInvite.setBindUserAgent(request.getHeader("User-Agent"));
// 记录邀请码类型快照(用户/租户)
userInvite.setInviteType(inviteCode.getInviteType());
userInvite.setInviteCode(inviteCode.getCode());
// 如果是租户邀请码记录租户ID
if ("TENANT".equals(inviteCode.getInviteType()) && inviteCode.getTenantId() != null) {
userInvite.setProfitTenantId(inviteCode.getTenantId());
userInvite.setInviterTenantId(inviteCode.getTenantId());
}
userInvitesService.save(userInvite); userInvitesService.save(userInvite);
// 更新邀请码使用次数 // 更新邀请码使用次数
inviteCode.setUsedCount(inviteCode.getUsedCount() + 1); inviteCode.setUsedCount(inviteCode.getUsedCount() + 1);
inviteCodesService.updateById(inviteCode); inviteCodesService.updateById(inviteCode);
log.info("User bound to invite code, userId={}, inviteCodeId={}, inviterUserId={}", log.info("User bound to invite code, userId={}, inviteCodeId={}, inviterUserId={}, inviteType={}",
keyboardUser.getId(), inviteCode.getId(), inviteCode.getOwnerUserId()); keyboardUser.getId(), inviteCode.getId(), inviteCode.getOwnerUserId(), inviteCode.getInviteType());
} catch (BusinessException e) { } catch (BusinessException e) {
// 邀请码验证失败,记录日志但不影响注册流程 // 邀请码验证失败,记录日志但不影响注册流程
log.warn("Failed to bind invite code for user {}: {}", keyboardUser.getId(), e.getMessage()); log.warn("Failed to bind invite code for user {}: {}", keyboardUser.getId(), e.getMessage());
@@ -379,14 +387,22 @@ public class UserServiceImpl extends ServiceImpl<KeyboardUserMapper, KeyboardUse
userInvite.setBoundAt(new Date()); userInvite.setBoundAt(new Date());
userInvite.setBindIp(request.getRemoteAddr()); userInvite.setBindIp(request.getRemoteAddr());
userInvite.setBindUserAgent(request.getHeader("User-Agent")); userInvite.setBindUserAgent(request.getHeader("User-Agent"));
// 记录邀请码类型快照(用户/租户)
userInvite.setInviteType(inviteCode.getInviteType());
userInvite.setInviteCode(inviteCode.getCode());
// 如果是租户邀请码记录租户ID
if ("TENANT".equals(inviteCode.getInviteType()) && inviteCode.getTenantId() != null) {
userInvite.setProfitTenantId(inviteCode.getTenantId());
userInvite.setInviterTenantId(inviteCode.getTenantId());
}
userInvitesService.save(userInvite); userInvitesService.save(userInvite);
// 更新邀请码使用次数 // 更新邀请码使用次数
inviteCode.setUsedCount(inviteCode.getUsedCount() + 1); inviteCode.setUsedCount(inviteCode.getUsedCount() + 1);
inviteCodesService.updateById(inviteCode); inviteCodesService.updateById(inviteCode);
log.info("User bound invite code, userId={}, inviteCodeId={}, inviterUserId={}", log.info("User bound invite code, userId={}, inviteCodeId={}, inviterUserId={}, inviteType={}",
userId, inviteCode.getId(), inviteCode.getOwnerUserId()); userId, inviteCode.getId(), inviteCode.getOwnerUserId(), inviteCode.getInviteType());
return true; return true;
} }