GuideInviteCodeService.java 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package com.zxyj.service;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  4. import com.zxyj.entity.GuideInviteCode;
  5. import com.zxyj.mapper.GuideInviteCodeMapper;
  6. import org.springframework.stereotype.Service;
  7. import java.util.Date;
  8. import java.util.UUID;
  9. /**
  10. * 指导师邀请码服务
  11. */
  12. @Service
  13. public class GuideInviteCodeService extends ServiceImpl<GuideInviteCodeMapper, GuideInviteCode> {
  14. /**
  15. * 生成邀请码
  16. */
  17. public GuideInviteCode generateInviteCode(Long guideId, Integer maxUseCount, Integer expireDays) {
  18. GuideInviteCode inviteCode = new GuideInviteCode();
  19. inviteCode.setGuideId(guideId);
  20. inviteCode.setCode(generateCode());
  21. inviteCode.setStatus("active");
  22. inviteCode.setUseCount(0);
  23. inviteCode.setMaxUseCount(maxUseCount != null ? maxUseCount : 1);
  24. if (expireDays != null && expireDays > 0) {
  25. Date expireAt = new Date();
  26. expireAt.setTime(expireAt.getTime() + expireDays * 24 * 60 * 60 * 1000L);
  27. inviteCode.setExpireAt(expireAt);
  28. }
  29. this.save(inviteCode);
  30. return inviteCode;
  31. }
  32. /**
  33. * 验证邀请码
  34. */
  35. public GuideInviteCode validateInviteCode(String code) {
  36. LambdaQueryWrapper<GuideInviteCode> wrapper = new LambdaQueryWrapper<>();
  37. wrapper.eq(GuideInviteCode::getCode, code)
  38. .eq(GuideInviteCode::getStatus, "active");
  39. GuideInviteCode inviteCode = this.getOne(wrapper);
  40. if (inviteCode == null) {
  41. return null;
  42. }
  43. // 检查是否过期
  44. if (inviteCode.getExpireAt() != null && inviteCode.getExpireAt().before(new Date())) {
  45. inviteCode.setStatus("expired");
  46. this.updateById(inviteCode);
  47. return null;
  48. }
  49. // 检查使用次数
  50. if (inviteCode.getUseCount() >= inviteCode.getMaxUseCount()) {
  51. inviteCode.setStatus("used");
  52. this.updateById(inviteCode);
  53. return null;
  54. }
  55. return inviteCode;
  56. }
  57. /**
  58. * 使用邀请码
  59. */
  60. public boolean useInviteCode(String code, Long userId) {
  61. GuideInviteCode inviteCode = validateInviteCode(code);
  62. if (inviteCode == null) {
  63. return false;
  64. }
  65. inviteCode.setUsedByUserId(userId);
  66. inviteCode.setUsedAt(new Date());
  67. inviteCode.setUseCount(inviteCode.getUseCount() + 1);
  68. // 如果达到最大使用次数,标记为已使用
  69. if (inviteCode.getUseCount() >= inviteCode.getMaxUseCount()) {
  70. inviteCode.setStatus("used");
  71. }
  72. return this.updateById(inviteCode);
  73. }
  74. /**
  75. * 获取指导师的邀请码列表
  76. */
  77. public java.util.List<GuideInviteCode> getGuideInviteCodes(Long guideId) {
  78. LambdaQueryWrapper<GuideInviteCode> wrapper = new LambdaQueryWrapper<>();
  79. wrapper.eq(GuideInviteCode::getGuideId, guideId)
  80. .orderByDesc(GuideInviteCode::getCreatedAt);
  81. return this.list(wrapper);
  82. }
  83. /**
  84. * 生成随机邀请码
  85. */
  86. private String generateCode() {
  87. return UUID.randomUUID().toString().replace("-", "").substring(0, 8).toUpperCase();
  88. }
  89. }