feat(invite): 支持租户与用户两种邀请码类型
This commit is contained in:
@@ -75,4 +75,18 @@ public class KeyboardUserInviteCodes {
|
||||
@TableField(value = "used_count")
|
||||
@Schema(description="邀请码已使用次数")
|
||||
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;
|
||||
}
|
||||
@@ -77,6 +77,7 @@ public class KeyboardUserInviteCodesServiceImpl extends ServiceImpl<KeyboardUser
|
||||
inviteCode.setExpiresAt(null); // 永久有效
|
||||
inviteCode.setMaxUses(null); // 不限次数
|
||||
inviteCode.setUsedCount(0); // 初始使用次数为0
|
||||
inviteCode.setInviteType("USER"); // 默认为普通用户邀请码
|
||||
|
||||
// 保存到数据库
|
||||
this.save(inviteCode);
|
||||
|
||||
@@ -270,14 +270,22 @@ public class UserServiceImpl extends ServiceImpl<KeyboardUserMapper, KeyboardUse
|
||||
userInvite.setBoundAt(new Date());
|
||||
userInvite.setBindIp(request.getRemoteAddr());
|
||||
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);
|
||||
|
||||
// 更新邀请码使用次数
|
||||
inviteCode.setUsedCount(inviteCode.getUsedCount() + 1);
|
||||
inviteCodesService.updateById(inviteCode);
|
||||
|
||||
log.info("User bound to invite code, userId={}, inviteCodeId={}, inviterUserId={}",
|
||||
keyboardUser.getId(), inviteCode.getId(), inviteCode.getOwnerUserId());
|
||||
log.info("User bound to invite code, userId={}, inviteCodeId={}, inviterUserId={}, inviteType={}",
|
||||
keyboardUser.getId(), inviteCode.getId(), inviteCode.getOwnerUserId(), inviteCode.getInviteType());
|
||||
} catch (BusinessException e) {
|
||||
// 邀请码验证失败,记录日志但不影响注册流程
|
||||
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.setBindIp(request.getRemoteAddr());
|
||||
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);
|
||||
|
||||
// 更新邀请码使用次数
|
||||
inviteCode.setUsedCount(inviteCode.getUsedCount() + 1);
|
||||
inviteCodesService.updateById(inviteCode);
|
||||
|
||||
log.info("User bound invite code, userId={}, inviteCodeId={}, inviterUserId={}",
|
||||
userId, inviteCode.getId(), inviteCode.getOwnerUserId());
|
||||
log.info("User bound invite code, userId={}, inviteCodeId={}, inviterUserId={}, inviteType={}",
|
||||
userId, inviteCode.getId(), inviteCode.getOwnerUserId(), inviteCode.getInviteType());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user