feat(invite): 支持租户与用户两种邀请码类型
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user