diff --git a/src/main/java/com/yolo/keyborad/controller/UserController.java b/src/main/java/com/yolo/keyborad/controller/UserController.java index 8a83c21..ef2d7c1 100644 --- a/src/main/java/com/yolo/keyborad/controller/UserController.java +++ b/src/main/java/com/yolo/keyborad/controller/UserController.java @@ -8,9 +8,13 @@ import com.yolo.keyborad.model.dto.AppleLoginReq; import com.yolo.keyborad.model.dto.user.*; import com.yolo.keyborad.model.entity.KeyboardFeedback; import com.yolo.keyborad.model.entity.KeyboardUser; +import com.yolo.keyborad.model.entity.KeyboardUserInviteCodes; +import com.yolo.keyborad.model.vo.user.InviteCodeRespVO; import com.yolo.keyborad.model.vo.user.KeyboardUserInfoRespVO; import com.yolo.keyborad.model.vo.user.KeyboardUserRespVO; import com.yolo.keyborad.service.IAppleService; +import com.yolo.keyborad.service.KeyboardFeedbackService; +import com.yolo.keyborad.service.KeyboardUserInviteCodesService; import com.yolo.keyborad.service.UserService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -41,8 +45,10 @@ public class UserController { private UserService userService; @Resource - private com.yolo.keyborad.service.KeyboardFeedbackService feedbackService; + private KeyboardFeedbackService feedbackService; + @Resource + private KeyboardUserInviteCodesService inviteCodesService; /** * 苹果登录 * @@ -133,4 +139,15 @@ public class UserController { return ResultUtils.success(userService.bindInviteCode(bindInviteCodeDTO)); } + @GetMapping("/inviteCode") + @Operation(summary = "查询邀请码", description = "查询用户自己的邀请码") + public BaseResponse getInviteCode() { + long userId = StpUtil.getLoginIdAsLong(); + KeyboardUserInviteCodes inviteCode = inviteCodesService.getUserInviteCode(userId); + if (inviteCode == null) { + inviteCode = inviteCodesService.createInviteCode(userId); + } + InviteCodeRespVO respVO = BeanUtil.copyProperties(inviteCode, InviteCodeRespVO.class); + return ResultUtils.success(respVO); + } } \ No newline at end of file diff --git a/src/main/java/com/yolo/keyborad/model/vo/user/InviteCodeRespVO.java b/src/main/java/com/yolo/keyborad/model/vo/user/InviteCodeRespVO.java new file mode 100644 index 0000000..f9c155f --- /dev/null +++ b/src/main/java/com/yolo/keyborad/model/vo/user/InviteCodeRespVO.java @@ -0,0 +1,29 @@ +package com.yolo.keyborad.model.vo.user; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.Date; + +/** + * 邀请码响应VO + */ +@Data +@Schema(description = "邀请码信息") +public class InviteCodeRespVO { + + @Schema(description = "邀请码") + private String code; + + @Schema(description = "邀请码状态:1=启用,0=停用") + private Short status; + + @Schema(description = "已使用次数") + private Integer usedCount; + + @Schema(description = "最大可使用次数") + private Integer maxUses; + + @Schema(description = "过期时间") + private Date expiresAt; +} diff --git a/src/main/java/com/yolo/keyborad/service/KeyboardUserInviteCodesService.java b/src/main/java/com/yolo/keyborad/service/KeyboardUserInviteCodesService.java index c7b63b9..7741b42 100644 --- a/src/main/java/com/yolo/keyborad/service/KeyboardUserInviteCodesService.java +++ b/src/main/java/com/yolo/keyborad/service/KeyboardUserInviteCodesService.java @@ -15,4 +15,18 @@ public interface KeyboardUserInviteCodesService extends IService implements KeyboardUserInviteCodesService{ + @Override + public KeyboardUserInviteCodes getUserInviteCode(Long userId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("owner_user_id", userId); + return this.getOne(queryWrapper); + } + + @Override + public KeyboardUserInviteCodes createInviteCode(Long userId) { + // 生成唯一的邀请码 + String code; + int maxRetries = 10; + int retryCount = 0; + + do { + // 生成8位字母数字组合的邀请码 + code = RandomUtil.randomString(8).toUpperCase(); + + // 检查邀请码是否已存在 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("code", code); + KeyboardUserInviteCodes existingCode = this.getOne(queryWrapper); + + if (existingCode == null) { + break; + } + + retryCount++; + } while (retryCount < maxRetries); + + // 创建邀请码实体 + KeyboardUserInviteCodes inviteCode = new KeyboardUserInviteCodes(); + inviteCode.setCode(code); + inviteCode.setOwnerUserId(userId); + inviteCode.setStatus((short) 1); // 启用状态 + inviteCode.setCreatedAt(new Date()); + inviteCode.setExpiresAt(null); // 永久有效 + inviteCode.setMaxUses(null); // 不限次数 + inviteCode.setUsedCount(0); // 初始使用次数为0 + + // 保存到数据库 + this.save(inviteCode); + + return inviteCode; + } + + @Override public KeyboardUserInviteCodes validateInviteCode(String code) { // 查询邀请码 diff --git a/src/main/java/com/yolo/keyborad/service/impl/UserServiceImpl.java b/src/main/java/com/yolo/keyborad/service/impl/UserServiceImpl.java index 9a8051c..cf40d0d 100644 --- a/src/main/java/com/yolo/keyborad/service/impl/UserServiceImpl.java +++ b/src/main/java/com/yolo/keyborad/service/impl/UserServiceImpl.java @@ -103,7 +103,6 @@ public class UserServiceImpl extends ServiceImpl